带有 popupTo 和 popUpToInclusive onResume 的 Android 导航组件不起作用

Posted

技术标签:

【中文标题】带有 popupTo 和 popUpToInclusive onResume 的 Android 导航组件不起作用【英文标题】:Android navigation component with popupTo and popUpToInclusive onResume not working 【发布时间】:2020-10-29 02:45:42 【问题描述】:

我试图弄清楚导航组件是如何工作的。这是我的片段,SignIn Fragment 和 HomeFragment。在我的导航图中,我有以下内容

<fragment
        android:id="@+id/signInFragment"
        android:name="com.nitsua.chatapp.screen.authentication.SignInFragment"
        android:label="SignInFragment"
        tools:layout="@layout/fragment_signin">
        <action
            android:id="@+id/navigate_to_home"
            app:destination="@id/homeFragment"
            app:popUpTo="@id/signInFragment"
            app:popUpToInclusive="true" />
    </fragment>
    <fragment
        android:id="@+id/homeFragment"
        android:name="com.nitsua.chatapp.screen.home.HomeFragment"
        android:label="HomeFragment"
        tools:layout="@layout/fragment_home"/>

如果我理解是正确的,当我使用操作:navigation_to_home 时,它​​将清除片段回栈,直到 signInFragment 包括它,因为 popUpToInclusive 设置为 true。如果没有设置为真。 SignInFragment 不会在 backstack 中被移除。

我尝试了 signInFragment -> homeFragment,然后是 homeFragment 和返回按钮。它工作正常。它不会登录,并且应用程序退出前台。然后我尝试从后台再次打开该应用程序。我期望应用程序位于 HomeFragment 中,但它位于 SignInFragment 中。 fragment backstack 应该存储 HomeFragment 事务,对吗?然后当它恢复时,它应该恢复 HomeFragment。但为什么它恢复了SignInFragment?我错过了什么吗?有人可以向我解释并推荐一种在 SignInFragment 上恢复到 HomeFragment 的方法吗?

谢谢。

【问题讨论】:

【参考方案1】:

您可以将 signInFragment 作为 Activity。如果您必须显示 signInActivity,请检查您的 MainActivity。如果是,则开始活动。

或者,如果需要登录,您也可以启动 homeFragment,然后立即启动 signInFragment。

然后在你的 signInFragment 中使用它。

navController.popBackStack(R.id.homeFragment, false)

会弹出你的 backstack,直到它到达 homeFragment 的第一个实例。

【讨论】:

嗨。谢谢你的建议。我发现了我的错误。我认为后退按钮不会破坏活动,但确实如此。这就是从一开始就创建片段和活动的原因。我应该添加逻辑来保存凭据并将其保存在某处,然后导航到主页片段。

以上是关于带有 popupTo 和 popUpToInclusive onResume 的 Android 导航组件不起作用的主要内容,如果未能解决你的问题,请参考以下文章

方向改变时碎片堆叠的行为

了解带有和不带有重定向的 JSF 生命周期阶段

带有和不带有聚合的 sql 查询

使用带有数据数组的 Yii2 和带有排序和过滤的 Gridview

带有滚动的 Div 和带有绝对位置的内容

访问控制允许带有和不带有 www 的来源