【问题标题】:Nested fragment and back stack嵌套片段和回栈
【发布时间】:2016-11-15 08:17:40
【问题描述】:

我有一个片段,其中有一个嵌套片段,我以这种方式添加:

            if (home == null) {
                home = new MyFragment();
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
                transaction.addToBackStack(MyFragment.class.getName());
                transaction.add(R.id.child_fragment, home).commit();
            }

当我进入另一个片段并返回时,上面的子片段不存在。我检查了,实例与 null 不同。

更新:我按照 Ashwin S Ashok 的建议更改了代码,但仍然无法正常工作。

【问题讨论】:

  • 尝试使用添加而不是替换。
  • 假设上面的代码在父fragment中,把getFragmentManager()改成getChildFragmentManager()是否有效?
  • 添加/替换得到相同的结果

标签: android back-stack android-nested-fragment


【解决方案1】:

尝试使用这些方法:

// 如果您不想保留片段,请使用此选项。

protected void replaceFragmentStack(int container, Fragment fragment) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(container, fragment);
    fragmentTransaction.commit();
}

// 如果要在堆栈中添加片段,请使用此选项。

protected void addFragmentStack(int container, Fragment fragment, String tag) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
    fragmentTransaction.add(container, fragment, tag);
    fragmentTransaction.addToBackStack(tag);
    fragmentTransaction.commit();
}

【讨论】:

  • 我尝试了您的建议,但它不再起作用。我的其他片段可以正常工作,但不能与嵌套片段一起使用。
【解决方案2】:

我建议您在片段内进行事务时使用getChildFragmentManager()。我猜它是一个错误。 你可以看看这个帖子它会帮助你很多Android 4.2: back stack behaviour with nested fragments

另外你还需要通过 The Curious Techizen 的blog

这里是相同机制的 github project 示例的链接

希望对你有帮助。

【讨论】:

  • 非常感谢您提供的信息。但是我真的很想在没有支持库的情况下这样做,因为我应该对片段进行很多更改。
猜你喜欢
  • 2012-11-22
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多