Android 导航:从 backStack 中删除活动

时间:2021-03-10 21:43:45

标签: android androidx android-architecture-navigation android-navigation android-navigation-graph

这个问题与 androidx.navigation 库特别相关。

我将我的主图分成 2 个图,因为我想要一个底部导航,上面有片段,另一个没有。我没有使用 <include...,而是将活动添加到第一个图表中

    <activity
        android:id="@+id/Activity2"
        android:name="com...Activity2"
        android:label="Activity2" />

这一切都很好,但我在第一个图中还有一个启动画面,用于检查用户是否已通过身份验证并将其直接导航到第二个图中。使用片段我可以只使用标准 popTopopToInclusive 来管理片段后台堆栈,但我无法弄清楚如何使用两个活动来做到这一点,以便在启动第二个活动时first 被终止并从 backstack 中移除,因此用户无法向后导航。

目前我只是在发生导航的片段中处理它

        navController
            .navigate(R.id.action_someFragment_to_anotherFragment)
        requireActivity().finish()

这有效,但它留下了出错的空间,如果可能,我想用导航库处理它。

1 个答案:

答案 0 :(得分:1)

每个个体 NavController 彼此完全独立。虽然 <activity> 目的地允许您使用 navigate() 转到一个完全独立的活动(可能会或可能不会使用导航本身),但导航本身永远不会finish() 活动作为navigate() 调用,所以你需要自己做。

使用具有不同导航图的多个活动不是根据 Navigating Navigation talk 在导航中处理身份验证的推荐方法,并且这种方法在很多方面都失败了(例如深层链接和失效在过程死亡/娱乐之后),guide for handling login 正确处理了。使用一个 NavController 和 ability to listen for navigation events 时,您不会遇到这些问题。