Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 正确更换碎片_Android_Android Fragments - Fatal编程技术网

Android 正确更换碎片

Android 正确更换碎片,android,android-fragments,Android,Android Fragments,我想知道在屏幕旋转后,更改片段、将其添加到backstack并恢复可见片段的正确方法是什么。 目前,我使用此方法初始化第一个片段: private void inflateInitialFragment() { FragmentManager manager = getFragmentManager(); Fragment mainFragment = manager.findFragmentByTag(MainMenuFragment.class.getSimpleName()

我想知道在屏幕旋转后,更改片段、将其添加到backstack并恢复可见片段的正确方法是什么。
目前,我使用此方法初始化第一个片段:

private void inflateInitialFragment() {
    FragmentManager manager = getFragmentManager();
    Fragment mainFragment = manager.findFragmentByTag(MainMenuFragment.class.getSimpleName());
    FragmentTransaction ft = manager.beginTransaction();
    if (mainFragment == null) {
      ft.replace(R.id.mainContainer, new MainMenuFragment(), MainMenuFragment.class.getSimpleName());
    } else if (!(mainFragment.isAdded() && !mainFragment.isDetached() && !mainFragment.isRemoving())) {
      ft.replace(R.id.mainContainer, mainFragment, MainMenuFragment.class.getSimpleName());
    }
    ft.commit();
    manager.executePendingTransactions();
}
为了显示新片段,我有如下方法:

public void openAwards() {
   getFragmentManager().beginTransaction().replace(R.id.mainContainer,
    new AwardsFragment(), AwardsFragment.class.getSimpleName()).addToBackStack(null).commit();
}
java.lang.IllegalStateException: Fragment already added: MainMenuFragment{42c64d90 #0 id=0x7f0b003f MainMenuFragment}
并返回主屏幕:

@Override
public void onBackPressed() {
   if (getFragmentManager().getBackStackEntryCount() == 0) {
      super.onBackPressed();
   } else {
      getFragmentManager().popBackStack();
   }
}
在几次屏幕旋转后,我遇到了如下崩溃:

public void openAwards() {
   getFragmentManager().beginTransaction().replace(R.id.mainContainer,
    new AwardsFragment(), AwardsFragment.class.getSimpleName()).addToBackStack(null).commit();
}
java.lang.IllegalStateException: Fragment already added: MainMenuFragment{42c64d90 #0 id=0x7f0b003f MainMenuFragment}
在屏幕旋转后,如何更改可见片段并恢复它们?

我不认为每次保存一些字符串或片段是恢复它们的好方法。

如果您的活动扩展了android.app.Activity,则不需要重写onBackPressed()。它将自动从后堆栈中弹出您的片段

你能看看这个问题吗