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

发布时间: 2021-02-26 07:37:44 作者: 大象笔记

需求

想实现点击 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)

文档参考

这里使用的是

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 的三种方式

上面用到的就是第三种方式。

我是一名山东烟台的开发者,联系作者