【问题标题】:How to navigate from a fragment to another clearing some other fragments from the stack?如何从一个片段导航到另一个从堆栈中清除一些其他片段?
【发布时间】:2021-11-12 10:09:56
【问题描述】:

我有以下导航图

Frag A  -->  Frag B --> Frag C --> -->  Frag D
        \                            /
         ->  Frag E  <---------------
                     \
                      -> Frag F

我当前的堆栈是 [Frag A、Frag B、Frag C 和 Frag D]。知道我当前的目的地是 Frag D,并且我想从 Frag D 导航到 Frag E,从堆栈中清除 Frag B、Frag C 和 Frag D,如何做到这一点?


当前堆栈:[Frag A、Frag B、Frag C 和 Frag D]

意图:导航到 Frag E,从堆栈中清除 [Frag B、Frag C 和 Frag D]

结果堆栈:[Frag A 和 Frag E]

【问题讨论】:

    标签: android android-architecture-navigation android-navigation


    【解决方案1】:

    如果您在导航图操作中导航,通过指定您需要您的操作来 popUpTo 某个片段,这将是一项简单的任务,如下所示:

     <fragment
            android:id="@+id/D_Frag"
            ...           
                <action
                android:id="@+id/action_DFrag_To_EFrag"
                app:destination="@+id/E_Frag"
                app:popUpTo="@+id/B_Frag"
                app:popUpToInclusive="true"
                />
            ...
        </fragment>
    

    其中popUpToInclusive 标志的意思是(你想popUpTo B_Frag 包括B_Frag(True) 还是排除它(False))。

    这个动作会从栈顶弹出所有片段,直到它到达B_Frag,然后到目的地E_Frag。

    和通过

    浏览导航图操作

    我的意思是你在 D Fragment 中使用类似这样的代码行来导航

    NavHostFragment.findNavController(DFrag.this)
                        .navigate(R.id.action_DFrag_To_EFrag);
    

    注意:代码中的三个点 (...) 表示我不在乎那里写的是什么代码,您可以删除这三个点并包含您想要的任何内容

    【讨论】:

      猜你喜欢
      • 2018-11-04
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 2022-01-02
      相关资源
      最近更新 更多