我的应用程序中有2个片段A和B. 主要活动开始于片段A.按下其中的一个按钮我用片段B替换它。
FragmentManager fm = getSupportFragmentManager();
B_Fragment pfrag = new B_Fragment();
pfrag.setArguments(args);
fm.beginTransaction().replace(R.id.frag_container, pfrag)
.addToBackStack("A_Fragment").commit();
现在在片段B中,我按下一个按钮,用片段A替换它:
fm.popBackStack();
fm.beginTransaction().addToBackStack("B_fragment").commit();
片段A被成功推送并从堆栈中弹出,而片段B则没有。 每次B_fragment被销毁并创建一个新的。 那么有人可以告诉我我缺少什么,以及如何将片段B推入堆栈并同时弹出A。
答案 0 :(得分:2)
FragmentManager fm = getSupportFragmentManager();
B_Fragment pfrag = new B_Fragment();
pfrag.setArguments(args);
fm.beginTransaction().replace(R.id.frag_container, pfrag).commit();
在Fragment B
上,为什么不将其替换为Fragment A
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.pnlLeft, details);
ft.commit();
popBackStack
没有加载最后一个片段,它通常用于弹出整个堆栈:
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
在加载另一个片段之前
beginTransaction()
replace() Or add()
commit()
按the button in Fragment B
时,请尝试以下代码。这将重新加载entire fragment
。
FragmentManager fm = getSupportFragmentManager();
if (fm.getBackStackEntryCount() > 0) {
fm.popBackStack();
}