我有一个应用程序,它有一个活动和许多片段,可以在Android 4.0和用户支持的平板电脑上运行。library.v4
第一个屏幕显示两个片段A和B:
----------------------------------
A | B <view pager>
|------------------------
<list |
view> |
| <view pager>
|
----------------------------------
点击A项目后,我添加了一个新的片段A,并为当前片段A添加了添加到后台的stask。我显示了新的片段A1,C-C包括嵌套的片段D和E,通过替换(,D,)添加而不添加到后台
----------------------------------
A1 | C
|
<list | D | E
view> | |
| |
| |
----------------------------------
当我开始研究背部行为时,问题就会出现。我开始在片段B中为我的适配器使用getShildFragmentManager(),因此反向启动显示前一个屏幕,但在这些片段之间多次单击后:a->A1,C(D,E)->back->a->A1、C(D、E)->back->[SISSUE]我看到片段a,但没有看到片段B,有时只是前一个片段D和E的背景
你能告诉我我的问题在哪里吗?
附加信息1) 我为片段A和B设置了两个framelayout容器的布局2) A是列表片段3) 用户点击A的项目4) A被新的A实例替换,A被添加到backsak中;B被新的片段C取代,该片段具有用于D和E片段的两个framelayout容器的布局5) 用户点击A实例,C通过repalce显示D和E片段,不将此事务添加到后台6) 用户单击返回7) 返回步骤1)
所以过了一段时间我找到了解决方案:
- 使用嵌套在其他片段中的片段时,请使用ChildFragmentManger
- 在onPause()之后不要使用任何片段事务(您可以使用commitStateLoss(),但它并不能解决所有问题,而且有几个原因使它不受欢迎)
- 跟踪你孩子的碎片,别忘了把它们从背后拿走或重复使用