android - 使用 Navigation 组件通过 App Bar/Toolbar 打开 Fragments
问题描述
我实现了一个底部导航视图,它还使用谷歌自己的解决方法来处理多个 backstacks,如架构组件示例中给出的,使用文件
private fun setupBottomNavigationBar() {
val navGraphIds = listOf(
R.navigation.blog,
R.navigation.events,
R.navigation.practice,
R.navigation.login
)
val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottom_nav)
val controller = bottomNavigationView.setupWithNavController(
navGraphIds = navGraphIds,
fragmentManager = supportFragmentManager,
containerId = R.id.fragment,
intent = intent
)
//use this to setup Action bar
controller.observe(this) { navController ->
setupActionBarWithNavController(navController)
}
currentNavController = controller
}
这就是我设置底部导航视图的方式。我有一个应该打开设置片段的应用栏,但到目前为止我一直无法这样做。有什么解决办法吗?这就是选择选项的样子
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.settings -> TODO()//->should open settings fragment
}
return true
}
我无法直接导航到设置,因为当前架构有多个导航图,因此它说,
java.lang.IllegalArgumentException: Navigation action/destination com.istemanipal.lumos:id/themeFragment cannot be found from the current destination Destination(com.istemanipal.lumos:id/blogFragment
解决方案
如果菜单项的 id 设置为片段 id,您可能可以使用导航控制器来切换目的地。
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.settings -> currentNavController.navigate(R.id.navigation_destination_id)
}
return true
}
推荐阅读
- r - 根据不同的数据集改变新列
- node.js - 使用 puppeteer 将网页抓取的数据上传到 node.js 中的 Firebase 云存储
- c# - 上传 Azure Blob 中的问题:ReadTimeout 引发了“System.InvalidOperationException”类型的异常
- javascript - 如何在节点 js 的搜索框中连接两个字符串?
- jupyter-notebook - 如何将 Jupyterhub 登录与生成的笔记本连接?
- java - 如何在可观察线程结束之前停止应用程序?
- python - 为河内塔生成一个元组
- reactjs - 禁止发布方法(未设置 CSRF cookie。)
- excel - Excel for macOS - 从 VBA 访问 ComboBox
- tailwind-css - 有没有办法让链接在默认情况下带有下划线?