需求
想实现点击 app bar / action bar 上的一个按钮,跳转到设置功能页,即 Settings Fragment。
findNavController 实现跳转
由于 action bar 在 main activity layout 中,并不属于任何一个 fragment,所以需要在 activity 中实现。
参考 Fragment 中的 findNavController 用法:
findNavController().navigate(R.id.action_FirstFragment_to_SecondFragment)
在 Activity 中使用 findNavController 如下:
findNavController(R.id.nav_host_fragment).navigate(R.id.action_FirstFragment_to_SettingsFragment)
文档参考
- https://developer.android.google.cn/guide/navigation/navigation-getting-started
- https://developer.android.google.cn/reference/kotlin/androidx/navigation/package-summary#findnavcontroller
这里使用的是
fun Activity.findNavController(@IdRes viewId: Int): NavController
所以写成
this.findNavController(R.id.nav_host_fragment).navigate(R.id.action_FirstFragment_to_SettingsFragment)
加上 this 更容易理解一些。在 main activity 中,this 即代表 Activity。
如何查找 viewId
其中参数 viewId 是 NavHost View 的 id,而 NavHost 的实现是 NavHostFragment,所以找到 layout 文件中的 NavHostFragment 的 id 即可
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
Kotlin 检索 NavController 的三种方式
- Fragment.findNavController()
- View.findNavController()
- Activity.findNavController(viewId: Int)
上面用到的就是第三种方式。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式