android-architecture-components - 在导航组件的起始目标位置时如何处理后退按钮

标签 android-architecture-components android-architecture-navigation android-navigation android-jetpack-navigation

我已经开始使用新的导航组件,而且我真的在挖掘它!但是,我确实有一个问题-当我处于图表的起始目标位置时,应该如何处理后退按钮?

这是我现在使用的代码:

findNavController(this, R.id.my_nav_host_fragment)
                .navigateUp()

当我在图表上的任何地方时,它都工作得很好,它使我返回,但是当我在它的开始时,由于后备箱为空,因此应用程序崩溃。

这一切对我来说都很有意义,我只是不确定如何处理。

虽然我可以检查当前片段的ID是否与我知道是图的根的ID相同,但我正在寻找一种更优雅的解决方案,例如是否存在bool标志,以表明当前图中的位置是否为起始位置与否。

有想法吗?

最佳答案

我有一个类似的场景,我想在到达起始目的地时完成事件,而在导航图更下方时执行常规的“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)

关于android-architecture-components - 在导航组件的起始目标位置时如何处理后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50937116/

相关文章:

android - 自定义 NavController 和自定义 NavHost

android - 如何通过 ViewModel 从 Fragment 观察 Repository LiveData

deep-linking - Jetpack 撰写 : Bottom bar navigation not responding after deep-linking

未检测到标题栏中的android向上按钮按下

Android 导航组件 Backstack 自行调用

android - 使用 viewpager 实现滑动抽屉,其中滑动抽屉驻留在 viewpager 上

android - view 在 MVVM 中向 ViewModel 请求数据是否可以?

android - 如何在 Android ViewModel 中等待多个作业?

android - 如何让 android 导航编辑器在多个屏幕上工作

Android Jetpack 导航组件问题,以启动 fragment 作为根目标