android - 无法使用导航组件清除所有片段的回栈
问题描述
我正在使用 Android 导航组件并面临一个奇怪的问题。无论我尝试什么,我都无法清除向上按钮的后退堆栈。
我的导航图如下所示:
让我们以 LoginFragment 为例,
<fragment
android:id="@+id/loginFragment"
android:name="com.yashovardhan99.firebaselogin.LoginFragment"
android:label="Login"
tools:layout="@layout/fragment_login" >
<action
android:id="@+id/action_loginFragment_to_welcomeFragment"
app:destination="@id/welcomeFragment"
app:popUpTo="@+id/nav_graph"
app:popUpToInclusive="true" />
</fragment>
要导航的 Java 代码是:
navController.navigate(
LoginFragmentDirections.actionLoginFragmentToWelcomeFragment());
我已将 PopUpTo 设置为图形 ID,并将 Inclusive 设置为 true。这应该在移动到 WelcomeFragment 时清除后台堆栈。但是,WelcomeFragment 仍然在操作栏上显示 Up 按钮,按下它会将我带回 PreLoginFragment(这是图表的主目的地)。奇怪的是,按下后退按钮会让我按预期退出应用程序。
解决方案
我用它解决了AppBarConfiguration
val appBarConfiguration = AppBarConfiguration
.Builder(
R.id.preLoginFragment,
R.id.welcomeFragment
)
.build()
然后,而不是setupActionBarWithNavController(this, navController)
你需要打电话setupActionBarWithNavController(this, navController, appBarConfiguration)
在这里,我声明了两个顶级片段,其中后退箭头不会显示在应用栏中。
推荐阅读
- java - 以编程方式在android中的按钮单击上执行传递效果?
- html - HTML:并排放置 3 个表格
- docker - Cumulocity:“无”微服务提供商不支持存储 docker 图像
- mqtt - 使用 MQTT 将测量值从 Node-Red 发送到 Cumulocity
- jenkins - Jenkinsfile:创建一个新文件(Groovy)
- python - 有没有办法在 Bokeh 中绘制非圆弧?
- javascript - SVG 路径在 Safari 中不支持,但在 Chrome 中工作
- ms-access - 如何使用宏自动退出和保存访问?
- grpc - 编译 proto 文件时,“ImageFile”类没有“FromString”成员
- language-agnostic - 允许调度程序切换正在执行的线程的机制是什么?