【发布时间】:2023-04-04 15:31:01
【问题描述】:
在我的应用中,我有 3 个片段。
应用以 [1] 开头,用户只能导航到 [2],然后可以选择导航到 [3]。
由于[3]在深处,我希望[3]直接回到[1]。
目前我使用 addToBackStack(null) 调用 [2]。因为我没有在 [3] 上调用 addToBackStack,所以我认为它会回到 [1]。
发生的情况是,[3] 返回到 [1],但现在两个片段重叠显示。片段 [3] 不调用 onPause()。再次调用片段 [2] 将显示 [2] 在其他片段之上,而不是清除屏幕。
来回导航会使应用程序崩溃。有时在打开一个新片段时,有时在点击后退按钮时。总是出现“已添加片段”错误(这对于后退按钮来说非常奇怪,但我也在切换片段之前检查过)。
任何想法可能导致这种奇怪的行为?使用 addToBackStack 或 [3] 也可以消除问题,但不能解决我的要求。我确实会在适当的时候调用所有超级方法。
信息:在http://beadsoft.de/android/FragmentTest.zip下载的代码示例
在 2.x、4.2.2 上的行为相同。使用 ActionBarCompat。
添加片段的代码:
FragmentManager fm = getActivity().getSupportFragmentManager();
Fragment fragment = fm.findFragmentByTag(Fragment_xyz.FRAG_TAG);
if (fragment == null)
fragment = Fragment_xyz.newInstance(int data);
fm.beginTransaction().replace(R.id.container, fragment, Fragment_xyz.FRAG_TAG)
.addToBackStack(null).commit()
【问题讨论】: