【发布时间】:2013-03-08 09:32:50
【问题描述】:
我对此感到非常困惑。我有一个带有列表导航的actionbar。我点击列表依次打开2个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 导致我的应用崩溃
为什么会这样,因为我使用的是替换?如何避免重新创建不再显示的片段,同时又不会失去对它们进行反压的可能性?
【问题讨论】:
-
你能从崩溃中添加堆栈跟踪吗?
-
这无关紧要。当片段尝试用数据填充其内容时发生崩溃,但它无法实例化视图组件,因为它甚至没有显示
-
您是否从
OnNavigationListener调用该方法?如果是,请记住监听器将由活动创建/重新创建触发。 -
if (createdFragment.getClass().isInstance(getDisplayedFragment())) return;的声明很可疑。你能告诉我们堆栈跟踪吗?堆栈跟踪永远不会无关紧要。