正确更换碎片

时间:2015-06-14 07:57:35

标签: android android-fragments

我想知道哪个是更改碎片的正确方法,将它们添加到backstack,并在屏幕旋转后恢复visibile碎片。
目前,我使用此方法初始化第一个片段:

\0

然后显示新片段我有这样的方法:

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();
}

经过几次屏幕旋转后,我遇到了像这样的崩溃:

@Override
public void onBackPressed() {
   if (getFragmentManager().getBackStackEntryCount() == 0) {
      super.onBackPressed();
   } else {
      getFragmentManager().popBackStack();
   }
}

如何更改可见碎片并在屏幕旋转后恢复它们? 我不认为每次保存一些字符串或片段是恢复它们的好方法。

1 个答案:

答案 0 :(得分:1)

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