替换时如何保存片段内容?

问题描述 投票:0回答:1

我有一个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;
           }
       }); ```


java android android-fragments fragment fragment-backstack
1个回答
0
投票

您可以通过不重新实例化片段来防止这种情况:

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:我目前使用了这个新的惊人组件,它似乎保留了片段状态。

© www.soinside.com 2019 - 2024. All rights reserved.