片段回栈和替换

Posted

技术标签:

【中文标题】片段回栈和替换【英文标题】:Fragment backstack and replace 【发布时间】:2019-07-11 15:01:28 【问题描述】:

我有 2 个片段 AB。我从片段A (A->B)addToBackStack() 添加了片段B。现在,当我在片段B 中并按回时一切正常并返回A

但是当我在片段C 中时,我想通过检查getFragmentManager().findFragmentByTag(""); 在片段管理器中存在 显示片段B,然后我replace 这个片段。

问题是backstack 在这种情况下不起作用。我的意思是每当我按回片段 A 时 显示。我怎样才能保留 backstack 呢?

【问题讨论】:

你是否将 B 添加到 backstack 中? 你的 onBackPressed() 是否调用了超级方法? @VivekMishra 是的 @underoid 是的,我打电话。 【参考方案1】:

这是我正在使用的代码

FragmentManager fragmentManager = getFragmentManager();
            fragmentManager.popBackStack(fragment.toString(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
            FragmentTransaction tx = fragmentManager.beginTransaction();

            Log.v("on calling fragment", fragment + "==" + fragment.toString());
            tx.replace(R.id.fl_main, fragment).addToBackStack(fragment.toString());

这给出了不同的特定backstack 被替换的每个片段的字符串。

【讨论】:

以上是关于片段回栈和替换的主要内容,如果未能解决你的问题,请参考以下文章

回栈事务后如何持久化分片数据?

当 Fragment 被替换并放入回栈(或删除)时,它是不是保留在内存中?

如何使用事务回栈来弹出片段?

DialogFragment dismiss() 不弹出回栈

导航组件 NavDeepLinkBuilder 回栈

从ViewPager android替换片段