android-architecture-components - 在导航组件的起始目的地时如何处理后退按钮
问题描述
我已经开始使用新的导航组件,我真的很喜欢它!我确实有一个问题 - 当我在图表的起始目的地时,我应该如何处理后退按钮?
这是我现在使用的代码:
findNavController(this, R.id.my_nav_host_fragment)
.navigateUp()
当我在图表上的任何位置时,它都工作得很好,它把我送回去,但是当我在它的开始时——应用程序崩溃了,因为后台堆栈是空的。
这一切对我来说都很有意义,我只是不知道如何处理它。
虽然我可以检查当前片段的 ID 是否与我知道是图根的 ID 相同,但我正在寻找一种更优雅的解决方案,例如图表中当前位置的布尔标志是否是起始位置与否。
想法?
解决方案
我有一个类似的场景,我想在开始目的地完成活动,并在导航图更下方时执行常规“navigateUp”。我通过一个简单的扩展函数解决了这个问题:
fun NavController.navigateUpOrFinish(activity: AppCompatActivity): Boolean {
return if (navigateUp()) {
true
} else {
activity.finish()
true
}
}
然后这样称呼它:
override fun onSupportNavigateUp() =
findNavController(R.id.nav_fragment).navigateUpOrFinish(this)
但是我无法使用 NavigationUI,因为每当我在起始目的地时,它都会隐藏后退箭头。所以而不是:
NavigationUI.setupActionBarWithNavController(this, controller)
我手动控制了主页图标:
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setHomeAsUpIndicator(R.drawable.ic_navigation_back)
推荐阅读
- batch-file - 如何获取 txt 文件的第一行并将其设置为批处理中的 %variable%?
- maven-3 - 如何获取我的 pom.xml 中包含的依赖项的最新发布版本
- python - 如何从 json 格式中获取数据帧
- reactjs - 为什么 React Router 显示 404 的路由
- python - 如何用Python提取和识别车牌号?
- php - 在 Web 主机中部署 Laravel 项目
- apache-spark - 通过 conda 安装 pyspark 时没有 start-history-server.sh
- javascript - Firebase 多路径更新失败,权限被拒绝 /
- reactjs - 如何在 React 虚拟化库表的列中添加图像
- angular - CdkVirtualScrollViewport 已附加(错误)