Android Jetpack组件-Navigation使用

这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战

组件简介

导航是指支持用户导航、进入和退出应用中不同内容片段的交互。Android Jetpack 的导航组件可帮助您实现导航,无论是简单的按钮点击,还是应用栏和抽屉式导航栏等更为复杂的模式,该组件均可应对。导航组件还通过遵循一套既定原则来确保一致且可预测的用户体验。

官方资源链接

官方文档:Introducing Navigation Component
官方教程:Jetpack 导航
Google官方实验室Demo: android-navigation

背景

由于项目起初订的框架为整个APP以Fragment为主, 如果通过FragmentManager进行管理,这种方式很容易造成代码臃肿,难以维护。正好接触到了Navigation就大胆的尝了一次鲜

使用

  • 获取 Android Studio 3.3 或更高版本

请确保您使用的是 Android Studio 3.3 或更高版本。这是使用 Android Studio 导航工具的必备条件。
如果您需要下载最新版本的 Android Studio,可以在此处下载

  • 加入依赖
def nav_version = "2.3.3"
// Navigation
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
复制代码
  • 创建navigation文件

res中创建一个名为navigation的文件夹, 并创建一个navigation.xml的Navigation文件

image.png 创建成功后文件内容为

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   android:id="@+id/navigation">

</navigation>
复制代码
  • 绑定navigation

在主界面的layout中对navigation进行绑定

<fragment
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_above="@id/nav_view"
    app:defaultNavHost="true"
    app:navGraph="@navigation/navigation" />
复制代码
  • 创建fragment文件并绑定

设置tools:layout 可预览跳转关系

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/navigation">
    <fragment
        android:id="@+id/fragment_forget_email"
        android:name="com.ihealthlabs.covidtest.ui.user.ForgetEmailFragment"
        tools:layout="@layout/fragment_forget_email">
    </fragment>

    <fragment
        android:id="@+id/fragment_forget_phone"
        android:name="com.ihealthlabs.covidtest.ui.user.ForgetPhoneFragment"
        tools:layout="@layout/fragment_forget_phone">
    </fragment>
</navigation>
复制代码
  • 在Activity中切换

findNavController指定需要替换的fragment控件ID, navigate指定需要跳转的目标fragment

findNavController(R.id.nav_host_fragment).navigate(R.id.fragment_forget_email)
复制代码

猜你喜欢

转载自juejin.im/post/7035620333734330404