嵌套片段和后台堆栈

时间:2016-11-15 08:17:40

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

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

            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建议的代码,但它仍然没有用。

2 个答案:

答案 0 :(得分:0)

尝试使用以下方法:

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

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();
}

答案 1 :(得分:0)

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

此外,您需要浏览The Curious Techizen的blog

以下是相同机制的github project示例的链接

我希望这会对你有所帮助。