Android Activity 中点击 action bar 按钮,跳转 Settings Fragment

更新日期: 2021-02-26 阅读次数: 2800 字数: 202 分类: Android

需求

想实现点击 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 聊聊, 查看更多联系方式