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()
,它是否有效?添加/替换将给出相同的结果我尝试了您的建议,但它不再有效。我的其他片段工作正常,但与嵌套片段不兼容。我尝试了你的建议,但它不再工作。我的其他片段工作正常,但与嵌套片段不兼容。非常感谢您提供的信息。但是我真的很想在没有支持库的情况下做这件事,因为我应该对片段做很多更改。非常感谢您提供的信息。但是我真的很想在没有支持库的情况下这样做,因为我应该对片段进行很多更改。