Android 导航:从 backStack 中删除 activity

Android Navigation: removing an activity from the backStack

这个问题专门与 androidx.navigation 库相关。

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

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

这一切都很好,但我在第一个图中也有一个初始屏幕,用于检查用户是否已通过身份验证并将他们直接导航到第二个图中。对于一个片段,我可以只使用标准 popTopopToInclusive 来管理片段后台堆栈,但我无法弄清楚如何通过两个活动来做到这一点,所以当第二个 activity 被启动,第一个被杀死并从后台堆栈中删除,因此用户无法向后导航。

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

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

这行得通,但它留下了错误的余地,如果可能的话,我想用导航库来处理它。

每个人NavController都是完全独立的。虽然 <activity> 目的地允许您使用 navigate() 前往完全独立的 activity(可能会或可能不会使用导航本身),但导航本身永远不会 finish() activity 作为 navigate() 调用的一部分,因此您需要自己完成。

使用具有不同导航图的多个活动不是根据Navigating Navigation talk and this approach fails in many ways (such as deep linking and invalidation after process death/recreation) that are correctly handled by the guide for handling login. When using one NavController and the ability to listen for navigation events在导航中处理身份验证的推荐方法,您不运行进入这些问题。