【问题标题】:Remove specific fragment from backstack从后台堆栈中删除特定片段
【发布时间】:2016-06-18 12:59:12
【问题描述】:

我有 2 个片段(片段 A、片段 B),它们分别以不同的容器 ID(R.id.containerA、R.id.containerB)显示在横向的多窗格中。

我的第一个片段的屏幕流程是 FragA->FragA1->FragA2

我的第二个片段的屏幕流程是 FragB->FragB1

我将每个片段添加到后台堆栈。所以我在 backstack 中有大约 5 个片段。

实际的导航顺序是FragA->FragB->FragA1->FragB1->FragA2

现在,当我按下后退按钮时,我希望首先从后台堆栈中弹出 FragB1 而不是 FragA2。我知道片段是在堆栈中维护的,但是如何处理这种特殊的多窗格场景?

我应该像这篇文章中提到的那样使用反射吗? Android Reorder Fragment Backstack

还有其他选择吗?

【问题讨论】:

    标签: android android-fragments fragment-backstack


    【解决方案1】:

    如果你只是想获取 FragB1 而不是 FragA2,你可以通过获取片段的名称来检查,如果片段的名称是 FragA2,则返回一步。您可以使用以下代码获取名称:

    FragmentManager.BackStackEntry backEntry=getFragmentManager().getBackStackEntryAt(getActivity().getFragmentManager().getBackStackEntryCount()-1);
    String str=backEntry.getName();
    

    【讨论】:

    • 得到名字后,是否可以只弹出Frag B1?我认为 A2 也会被弹出,因为 backstack 是 LIFO。
    • 根据定义,是的,当您弹出 B1 时,A2 也会弹出。但是如果你持有对它的引用,你可以做的是把 A2 放回堆栈中。
    猜你喜欢
    • 2018-07-27
    • 2015-09-20
    • 1970-01-01
    • 2016-12-15
    • 1970-01-01
    • 2019-02-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    相关资源
    最近更新 更多