【问题标题】:Android Navigation: removing an activity from the backStackAndroid导航:从backStack中删除一个活动
【发布时间】:2021-03-10 21:43:45
【问题描述】:

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

我将我的主图拆分为 2 个图,因为我想要一个带有底部导航且其上方的片段和一个没有。我没有使用<include...,而是将活动添加到第一个图表

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

这一切都很好,但我在第一个图中还有一个启动屏幕,用于检查用户是否经过身份验证并将它们直接导航到第二个图中。对于一个片段,我可以只使用标准的popTopopToInclusive 来管理片段回栈,但是我无法弄清楚如何使用两个活动来做到这一点,以便在第二个活动启动时第一个被杀死并且从 backstack 中删除,因此用户无法向后导航。

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

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

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

【问题讨论】:

  • 请注意有一个guide specifically around handling login with Navigation。您不需要单独的活动来隐藏某些目的地的底部导航,因为这正是 listening for navigation events 的 API 使用的示例。
  • 我不确定该指南是否涉及我面临的问题。我对底部导航事件使用导航没有问题。我可能会添加一堆逻辑来仅使用一个活动来显示/隐藏底部导航,但这感觉很hacky,并且库支持活动之间的导航。
  • 它支持退出一个NavController的范围,进入一个完全独立的Activity,是的。正如您所发现的那样,这并没有改变 Activity API 不允许您执行任何您可以在一个 NavController 中执行的操作的方式。
  • 如果答案是“你不能”,请随意回答,我会接受。那是我的问题

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


【解决方案1】:

每个NavController 都完全独立于彼此。虽然&lt;activity&gt; 目的地允许您使用navigate() 转到完全独立的活动(可能使用也可能不使用导航本身),但导航本身永远不会将finish() 活动作为navigate() 调用的一部分,因此您需要自己做。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-20
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多