带有 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 导航组件不起作用的主要内容,如果未能解决你的问题,请参考以下文章