我有一个BottomNavigationView
,并使用下面的代码使用它在两个片段之间导航。我想要的是当我替换片段时,我不希望它重新创建/重新膨胀,因为它具有重要的内容。
我使用的代码:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId()){
case R.id.home_nav:
FirstFragment firstFragment = new FirstFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.frame, firstFragment).addToBackStack("stack").commit();
break;
case R.id.more_nav:
SecondFragment secondFragment = new SecondFragment();
getSupportFragmentManager().beginTransaction().replace(R.id.frame, secondFragment).addToBackStack("stack").commit();
break;
default:
break;
}
return true;
}
}); ```
您可以通过不重新实例化片段来防止这种情况:
private ArrayList fragments = new ArrayList<Fragment>();
public SomeClassConstructor() {
fragments.add(new SomeFragment());
fragments.add(new AnotherFragment());
}
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch(menuItem.getItemId()) {
case SOME_CASE:
fragments.get(POSITION);
break;
...
}
}
如果使用的是ViewPager:
ViewPager:在ViewPager上设置offScreenLimit
ViewPager2:我目前使用了这个新的惊人组件,它似乎保留了片段状态。