【发布时间】:2014-09-12 19:37:53
【问题描述】:
在我的开源 Android 应用中,发现了一个问题,即特定片段会出现在另一个片段之上或在特定情况下使应用崩溃。
如果您想查看更多信息和示例屏幕截图,请访问 GitHub 上的问题: https://github.com/rpi-mobile/RPIMobile-Android/issues/31
我已经确定了原因,但想知道使用 android.support.v4.app 包中的哪些方法来解决问题。
在MainActivity.java中,是使用FragmentTransaction.replace()切换片段的导航抽屉的代码。
问题出现是因为在MapFragment,我使用:
ViewMapFragment vmf = new ViewMapFragment();
FragmentTransaction ft = getSherlockActivity().getSupportFragmentManager().beginTransaction();
ft.addToBackStack(null);
ft.replace(R.id.content_frame, vmf);
ft.commit();
在ViewMapFragment的onDestroyView():
FragmentManager fm = getSherlockActivity().getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.remove(fm.findFragmentById(R.id.mapview));
ft.commit();
onDestroyView() 正确地从视图中删除了 ViewMapFragment,但如果您将它放在视图中并使用导航抽屉更改为不同的片段,MapFragment 仍然在后台堆栈中。
所以,对于我的问题:
1) 如何在尝试删除/替换之前检查特定片段是否在后堆栈上,或者如果您尝试在没有任何内容(即不检查)时应用程序不会崩溃?例如。当后台堆栈上没有任何内容时调用popBackStack()。
2) 我应该使用FragmentManager 类方法来尝试从后台堆栈中删除MapFragment 还是应该使用FragmentTransaction 方法?利弊?
3) popBackStack() 和 popBackStackImmediate() 在 UI 上的区别是什么?用户是否看到了一些有问题的过渡?
【问题讨论】:
标签: java android android-fragments fragment