我有一个片段,其中有一个嵌套片段,我以这种方式添加:
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建议的代码,但它仍然没有用。
答案 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示例的链接
我希望这会对你有所帮助。