我试图弄清楚导航组件的工作方式。这是我的片段,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吗?
谢谢。
答案 0 :(得分:0)
您可以将signInFragment用作活动。如果必须显示signInActivity,请签入MainActivity。如果是,则开始活动。
或者您可以启动homeFragment,然后在需要登录后立即启动signInFragment。
然后在您的signInFragment中使用它。
navController.popBackStack(R.id.homeFragment, false)
将弹出堆栈,直到到达homeFragment的第一个实例为止。