【问题标题】:getChildFragmentManager() and containerIdgetChildFragmentManager() 和 containerId
【发布时间】:2016-03-21 18:10:19
【问题描述】:

我使用 getChildFragmentManager()、containerId 和方法 .add() 在父片段代码中创建子片段。然后我尝试使用 childFragmentManager()、相同的 containerId 和 .replace() 在 childfragment 代码的 onActivityCreated() 方法中替换该 childFragment,但此时我收到一条错误消息,指出 fragmentTransaction 对象或任何找不到视图对于我的片段“nameofchildfragclass”的containerId。

我验证了当我创建子项时父项中的 containerId 和我尝试替换子项时子项中的 containerId 是相同的(它们应该是)。

【问题讨论】:

    标签: android fragment android-nested-fragment child-fragment


    【解决方案1】:

    当您在 ChildFragment 中时,请使用 getSupportFragmentManager(如果您不使用支持,则使用 getFragmentManager)而不是 getChildFragmentManager。

    这将返回创建 ChildFragment 的片段管理器,它是您使用 ChildFragmentManager 的 ChildFragment 的父级。

    每个片段都有getFragmentManager 和getChildFragmentManager。

    Fragment parent:使用 childFragmentManager 添加 Child。 (现在添加的 Fragment 是这个父 Fragment 的 Child)

    Fragment child:调用 getFragmentManager 获取 parent 的 ChildFragmentManager。调用 getChildFragment 将提供一个新的 FragmentManager 以在该片段中添加子级。不是你需要的)

    【讨论】:

    • 是的,您使用 childFragmentManager 创建的子片段。你说在那个片段(ChildFragment)中你想切换片段。为此,您必须从此 childFragment 调用 getSupportFragmentManager 以获取创建它的管理器。 childFragment 上的 getChildFragmentManager 将产生一个新的 fragmentmanager,用于在 childFragment 上添加子项。希望我让它更清楚一点。我知道这有点令人困惑。我会尝试编辑我的答案。
    • 是的,通过获取 supportFragmentManager,您可以获得创建片段的管理器。那是唯一一个跟踪这个片段的管理器。如果您想用上面的片段替换 ChildFragment,请始终使用 getSupportFragmentManager。不会导致奇怪的行为,这是正确的做法。
    • 请注意,如果您在使用 childfragmentManager 的父 Fragment 中。在 childFragment 中,您使用 fragmentManager。仅对孩子使用 childFragmentManager。
    • 支持片段是支持 v4 库提供的片段。您是否使用仅支持片段。我建议您始终使用 supportFragments 以与以前的 SDK 版本兼容。在 SupportFragment 中,您必须使用 getFragmentManager,因为它是支持 Fragment,它直接为您提供 supportFragmentManager。如果你刚开始使用 Fragments 会很混乱
    • 主要来自 Android 文档的经验和自我理解。我不知道也许检查这个guides.codepath.com/android/Creating-and-Using-Fragments。其中嵌套片段部分。也许一本书更彻底地涵盖了这一点。
    【解决方案2】:

    在child代码里面,要替换child,需要用到

    getParentFragment().getChildFragmentManager()
    

    不是

    getChildFragmentManager()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 1970-01-01
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      相关资源
      最近更新 更多