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

文章目录

    需求

    想实现点击 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 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式