Android 嵌套片段和后堆栈

Android 嵌套片段和后堆栈,android,back-stack,android-nested-fragment,Android,Back Stack,Android Nested Fragment,我有一个片段,其中有一个嵌套片段,我通过以下方式添加该片段: if (home == null) { home = new MyFragment(); FragmentTransaction transaction = getFragmentManager().beginTransaction(); transaction.setTransition(FragmentTrans

我有一个片段,其中有一个嵌套片段,我通过以下方式添加该片段:

            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的Ashok的建议更改了代码,但仍然不起作用。

尝试使用以下方法:

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

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

尝试使用以下方法:

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

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

我建议您在片段内进行事务处理时使用
getChildFragmentManager()
。我想这是一只虫子。 你可以看看这个帖子,它会帮你很多

你还需要通过好奇的Techizen

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


我希望这将对您有所帮助。

我建议您在片段内进行事务处理时使用
getChildFragmentManager()
。我想这是一只虫子。 你可以看看这个帖子,它会帮你很多

你还需要通过好奇的Techizen

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


我希望这将对您有所帮助。

尝试使用添加而不是替换。假设上面的代码在父片段中,如果将
getFragmentManager()
更改为
getChildFragmentManager()
?添加/替换使用“添加而不是替换”给出相同的结果。假设上面的代码在父片段中,如果您将
getFragmentManager()
更改为
getChildFragmentManager()
,它是否有效?添加/替换将给出相同的结果我尝试了您的建议,但它不再有效。我的其他片段工作正常,但与嵌套片段不兼容。我尝试了你的建议,但它不再工作。我的其他片段工作正常,但与嵌套片段不兼容。非常感谢您提供的信息。但是我真的很想在没有支持库的情况下做这件事,因为我应该对片段做很多更改。非常感谢您提供的信息。但是我真的很想在没有支持库的情况下这样做,因为我应该对片段进行很多更改。