【问题标题】:How propely work with nested fragments?如何正确处理嵌套片段?
【发布时间】:2013-08-29 17:41:00
【问题描述】:

我有一个应用程序,其中包含一个 Activity 和许多片段,可在装有 Android 4.0 和用户 support.library.v4 的平板电脑上运行

第一个屏幕显示两个片段 A 和 B:

----------------------------------
A      | B   <view pager>
       |------------------------
<list  |
view>  |
       |     <view pager>
       |
----------------------------------

单击A项目后,我添加了一个新片段A,并为当前片段A添加了后置任务。我显示了一个新片段A1,C-C包括嵌套片段D和E通过replace(,D,)添加,没有添加到backstak

----------------------------------
A1     |             C
       |
<list  |    D      |     E
view>  |           |
       |           |
       |           |
----------------------------------

当我开始处理背部行为时,就会出现问题。我开始在片段 B 中为我的适配器使用 getShildFragmentManager() 所以返回开始显示前一个屏幕,但在此片段之间多次单击后:A -> A1, C(D,E) -> BACK -> A -> A1, C( D,E) -> BACK -> A -> A1, C(D,E) -> BACK -> [ISSUE] 我看到一个片段 A 但没有看到片段 B 有时只是前一个片段 D 的背景E

你能告诉我我的问题在哪里吗?

附加信息 1)我为片段A和B设置了两个框架布局容器的布局 2) A 是列表片段 3)用户点击A的项目 4)A被新的A实例替换,A在backstak中加入; B 被新片段 C 替换,该片段 C 具有用于 D 和 E 片段的两个框架布局容器的布局 5)用户点击A实例,C通过repalce显示D和E片段,不要将此事务添加到backstack 6) 用户点击返回 7) 返回步骤 1)

【问题讨论】:

  • 请明确定义导航流程

标签: android android-fragments


【解决方案1】:

所以过了一段时间我找到了解决方案:

  1. 在处理嵌套在其他片段中的片段时使用 ChildFragmentManger
  2. onPause() 之后不要使用任何片段事务(您可以使用 commitStateLoss(),但它并不能解决所有问题,并且出于多种原因不鼓励)
  3. 跟踪您孩子的片段,不要忘记将它们从后台删除或重复使用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-02
    • 2023-04-08
    • 1970-01-01
    • 2021-03-16
    • 1970-01-01
    相关资源
    最近更新 更多