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

时间:2020-07-08 16:13:51

标签: android kotlin android-jetpack fragment-backstack android-jetpack-navigation

我试图弄清楚导航组件的工作方式。这是我的片段,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时,由于popUpToInclusive设置为true,它将清除片段返回栈,直到signInFragment包括它为止。如果未设置为true。 SignInFragment将不会在后堆栈中删除。

我尝试了signInFragment-> homeFragment,然后是homeFragment和后退按钮。它工作正常。它无法登录,并且该应用程序脱离了前台。然后,我尝试从后台再次打开该应用程序。我期望该应用位于 HomeFragment 中,但它位于SignInFragment中。片段堆栈应该存储HomeFragment事务,对吗?然后,当它恢复时,它应该恢复HomeFragment。但是为什么要恢复SignInFragment?我想念什么吗?有人可以向我解释并推荐一种方法来代替SignInFragment上的HomeFragment吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

您可以将signInFragment用作活动。如果必须显示signInActivity,请签入MainActivity。如果是,则开始活动。

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

然后在您的signInFragment中使用它。

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

将弹出堆栈,直到到达homeFragment的第一个实例为止。