我对此感到非常困惑。我有一个带有列表导航的 actionbar
。我点击列表以打开两个 fragment
,并在同一活动中显示。我基本上使用以下方法替换它们:
public void openFragment(AprilAppsFragment createdFragment){
if (createdFragment.getClass().isInstance(getDisplayedFragment()))
return;
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
transaction.replace( R.id.main_fragment, createdFragment, "displayed fragment");
transaction.addToBackStack(null);
transaction.commit();
}
我打开了碎片A,然后打开了碎片B,接着旋转了屏幕。碎片A被重新创建导致我的应用崩溃。
由于我正在使用“replace”,为什么会发生这种情况?如何避免重新创建不再显示的碎片,而不失去返回到它们的可能性?
OnNavigationListener
中调用该方法吗?如果是,请记住该监听器将在活动创建/重新创建时触发。 - userif (createdFragment.getClass().isInstance(getDisplayedFragment())) return;
非常可疑。你能否展示一下堆栈跟踪?堆栈跟踪从来都不是无关紧要的。 - Sherif elKhatib