0

我的应用程序中有 2 个片段 A 和 B。mainactivity 以片段 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 弹出。

4

1 回答 1

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();
} 
于 2013-07-17T12:14:00.247 回答