我试图了解是否有可能按活动重构应用程序以使用新的导航组件。我可以看到它确实支持多种活动设计,但是仅通过为每个活动创建一个导航组件即可。这意味着需要一口气在整个应用程序中进行努力,这是不可行的。 还有其他办法吗?
我在不使用导航组件的活动和使用导航组件的活动之间导航时遇到了一些问题,例如如何使用向上箭头甚至显示向上箭头从导航活动中弹出先前的非导航活动在第二个活动的主页片段中。
我尝试手动设置DisplayHomeAsUpEnabled(true)并在清单中声明父活动,但不仅该解决方案似乎非常不准确(如果两个不同的活动可能是父活动,该怎么办?),还迫使我按顺序添加SINGLE_TOP属性回到以前的状态,总的来说似乎有太多创可贴很快就会击中更多障碍...
欢迎提出任何建议。 谢谢!
答案 0 :(得分:1)
因此,经过大约2天的搜索和尝试后,我发现最好的选择是用导航组件设置工具栏,同时用默认构建器替换使用导航图的appbar配置-一个具有空的顶层片段列表。此更改实质上告诉导航组件没有顶层片段,因此始终显示向上箭头(至少是我的理解)。如果我们在起始目标位置(条目片段)检测到一个事件,还需要添加一个向上箭头侦听器以将后堆栈弹出到上一个活动
Blockquote
private fun setToolbar() {
navController = findNavController(R.id.navigation_host_fragment)
setSupportActionBar(binding.toolbar)
binding.toolbar.setupWithNavController(
navController,
AppBarConfiguration.Builder().build() // Use Builder for empty top level list, up arrow display for home fragment.
)
binding.toolbar.setNavigationOnClickListener {
if (navController.currentDestination?.id == navController.graph.startDestination) {
onBackPressed()
} else {
navController.navigateUp()
}
}
}
Blockquote
希望这可以帮助遇到同样困难的其他人过渡到使用新的ish Nav组件!!!