android - Android Navigation 组件 popUpTo 带回弹出的 Fragment
问题描述
请不要将此标记为重复,我已经阅读了这些 SO 问题,但仍然无法 使用导航组件 popUpTo 错误 Android 导航组件 popUpTo 行为 Android Navigation Component + Login Flow + Nested BottomNavigationView
我在用
def nav_version = "2.2.1"
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
这是我的导航代码:
<fragment
android:id="@+id/splashFragment"
android:name="com.view.SplashFragment"
android:label="SplashFragment" >
<action
android:id="@+id/action_splashFragment_to_loginFragment"
app:destination="@id/loginFragment"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popUpTo="@id/loginFragment"
app:popUpToInclusive="true"/>
<action
android:id="@+id/action_splashFragment_to_mainFragment"
app:destination="@id/mainFragment"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popUpTo="@id/mainFragment"
app:popUpToInclusive="true"/>
</fragment>
当我打开时按下后退按钮MainFragment
或者LoginFragment
我仍然能够导航回splashFragment。我已经有app:popUpTo
和app:popUpToInclusive
标签了。我希望我的应用不要导航回splashFragment
解决方案
你在你的popUpTo
根据popUpTo 指南:
app:popUpTo
告诉导航库在调用navigate()
. 属性值是应保留在堆栈中的最新目的地的 ID。您还可以包括
app:popUpToInclusive="true"
指示指定的目标app:popUpTo
也应该从后台堆栈中删除。
popUpTo
应该指向已经在后堆栈上的目标,您要从后堆栈弹出。因此,如果您想将所有内容弹出到,splashFragment
您应该使用app:popUpTo="@id/splashFragment"
. 如果您想弹出所有内容,包括,splashFragment
那么您应该使用app:popUpTo="@id/splashFragment"
and app:popUpToInclusive="true"
:
<fragment
android:id="@+id/splashFragment"
android:name="com.view.SplashFragment"
android:label="SplashFragment" >
<action
android:id="@+id/action_splashFragment_to_loginFragment"
app:destination="@id/loginFragment"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popUpTo="@id/splashFragment"
app:popUpToInclusive="true"/>
<action
android:id="@+id/action_splashFragment_to_mainFragment"
app:destination="@id/mainFragment"
app:popEnterAnim="@anim/slide_in_left"
app:popExitAnim="@anim/slide_out_right"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"
app:popUpTo="@id/splashFragment"
app:popUpToInclusive="true"/>
</fragment>
推荐阅读
- django - 如何为 Djoser 电子邮件使用不同的域?
- assembly - nasm(x86_64 System V ABI)可移植方式确定使用的堆栈内存?
- tensorflow - 如何修复我的新笔记本电脑运行 tensorflow-gpu 2.1 的能力
- javascript - 如何加快 JavaScript 图像加载
- assembly - 重定位应该如何在静态 PIE 二进制文件中工作?
- .net - 在不使用 azcopy 的情况下跨 Azure 容器复制文件
- java - 什么是列表节点?为什么 List Node 的 return 语句返回数组而不是 Node?
- java - 计算星期几JAVA
- javascript - React Native 类型的函数
- java - Java libGDX 数组损坏