Java 添加带有动画问题的片段(不替换)
当我使用fragment(.add)方法并在它们之间移动时使用“淡入淡出”动画时。它给了我这个错误“java.lang.IllegalStateException:commit已经调用了”。我按照这个添加片段,然后使用动画 她是我的密码Java 添加带有动画问题的片段(不替换),java,android,Java,Android,当我使用fragment(.add)方法并在它们之间移动时使用“淡入淡出”动画时。它给了我这个错误“java.lang.IllegalStateException:commit已经调用了”。我按照这个添加片段,然后使用动画 她是我的密码 final Fragment fragment1 = new HomeFragment(); final Fragment fragment2 = new LibraryFragment(); final Fragment fragment3 = new Ima
final Fragment fragment1 = new HomeFragment();
final Fragment fragment2 = new LibraryFragment();
final Fragment fragment3 = new ImageFragment();
final FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
Fragment active = fragment1;
private void initializeBottomNavigation() {
// animations
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
ft.setCustomAnimations(android.R.anim.fade_out, android.R.anim.fade_in);
// add fragments
ft.add(R.id.fragment_layout, fragment3, "3").hide(fragment3).commit();
ft.add(R.id.fragment_layout, fragment2, "2").hide(fragment2).commit();
ft.add(R.id.fragment_layout,fragment1, "1").commit();
// show and hid them when click on BottomNav items
BottomNavigationView navigationView = findViewById(R.id.bottom_navigation);
navigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.home_item:
ft.hide(active).show(fragment1).commit();
active = fragment1;
return true;
case R.id.books_item:
ft.hide(active).show(fragment2).commit();
active = fragment2;
return true;
case R.id.image_item:
ft.hide(active).show(fragment3).commit();
active = fragment3;
return true;
}
return false;
}
});
}
FragmentTransaction
是一次性使用的对象。您不应该在多个操作中重用它,而应该在每次需要更改某些片段时启动一个新事务
在您的情况下,这是:一次在初始化过程中,和一次在每个底部酒吧按下
首先,从顶部删除行FragmentTransition ft=fm.beginTransaction()
,因为您不能重用该对象
然后更改如下功能,即每次按下按钮都创建一个新事务:
private void initializeBottomNavigation() {
// first one transaction to add each Fragment
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_layout, fragment3, "3").hide(fragment3);
ft.add(R.id.fragment_layout, fragment2, "2").hide(fragment2);
ft.add(R.id.fragment_layout, fragment1, "1");
// commit once! to finish the transaction
ft.commit();
// show and hide them when click on BottomNav items
BottomNavigationView navigationView = findViewById(R.id.bottom_navigation);
navigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
// start a new transaction
FragmentTransaction ft = fm.beginTransaction();
// animations
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out);
ft.setCustomAnimations(android.R.anim.fade_out, android.R.anim.fade_in);
switch (item.getItemId()) {
case R.id.home_item:
ft.hide(active).show(fragment1).commit();
active = fragment1;
return true;
case R.id.books_item:
ft.hide(active).show(fragment2).commit();
active = fragment2;
return true;
case R.id.image_item:
ft.hide(active).show(fragment3).commit();
active = fragment3;
return true;
}
return false;
}
});
}