android navigation 用法详细使用

Navigation 的关键概念

1、Navigation Graph: 定义了应用内的所有导航目的地以及它们之间的连接。

2、NavHost: 一个 UI 元素,用于承载当前的导航目的地。

3、NavController: 管理目的地之间的导航。

4、Destination: 导航图中的一个节点,用户导航到该节点时,宿主会显示其内容。

5、Route: 用于导航的唯一标识符,可以是任何可序列化的数据类型
如何使用 Navigation

1、添加依赖:

在项目的 build.gradle 文件中添加 Navigation 组件的依赖

java 复制代码
implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"

2、创建导航图:

在 res 目录下创建一个新的导航目录,然后创建一个导航资源文件(例如 nav_graph.xml)。

3、配置导航图:

在导航图 XML 文件中添加 fragment 标签来定义目的地,并使用 action 标签定义它们之间的导航操作。

java 复制代码
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/nav_graph">
    <fragment
        android:id="@+id/homeFragment"
        android:name="com.example.HomeFragment"
        android:label="Home">
        <action
            android:id="@+id/action_homeFragment_to_detailsFragment"
            app:destination="@id/detailsFragment" />
    </fragment>
    <fragment
        android:id="@+id/detailsFragment"
        android:name="com.example.DetailsFragment"
        android:label="Details" />
</navigation>

4、在 Activity 中设置 NavHost:

在 Activity 的布局文件中添加 NavHostFragment,并将其与导航图关联。

java 复制代码
<fragment
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:navGraph="@navigation/nav_graph" />

5、导航到目的地:

使用 NavController 进行导航。

kotlin 复制代码
val navController = findNavController(R.id.nav_host_fragment)
navController.navigate(R.id.action_homeFragment_to_detailsFragment)

6、传递参数:

可以通过 Bundle 传递参数。

kotlin 复制代码
val bundle = Bundle().apply {
    putString("KEY", "value")
}
navController.navigate(R.id.action_homeFragment_to_detailsFragment, bundle)

7、处理导航事件:

可以监听导航事件,例如 onNavigateUp 来处理返回按钮的事件。

kotlin 复制代码
override fun onSupportNavigateUp(): Boolean {
    return findNavController(R.id.nav_host_fragment).navigateUp()
        || super.onSupportNavigateUp()
}

8、自定义动画:

可以为导航操作设置自定义动画。

java 复制代码
<action
    android:id="@+id/action_homeFragment_to_detailsFragment"
    app:destination="@id/detailsFragment"
    app:enterAnim="@anim/slide_in_right"
    app:exitAnim="@anim/slide_out_left"
    app:popEnterAnim="@anim/slide_in_left"
    app:popExitAnim="@anim/slide_out_right" />
相关推荐
三少爷的鞋8 小时前
AI 时代,我们都将成为通才型开发者:只懂 Android,已经不够了
android
Dovis(誓平步青云)11 小时前
家里设备越来越多,如何用一张空间地图控制灯光和温度![
android·java·前端·javascript·人工智能·电脑
晚风叙码13 小时前
MySQL 数据类型详解:从数值到字符串,一篇讲透
android·mysql·adb
传奇开心果编程14 小时前
【Compose Multiplatform 跨端开发学与练】第3课 布局与组件
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程16 小时前
【Compose Multiplatform 跨端开发学与练】第8课 资源管理与主题
android·windows·学习·ios·kotlin·web·composer
传奇开心果编程18 小时前
【Compose Multiplatform 跨端开发学与练】第9课 测试与调试
android·学习·macos·ios·kotlin·web·composer
传奇开心果编程18 小时前
【Compose Multiplatform 跨端开发学与练】第4课 导航与路由
android·windows·学习·ui·ios·kotlin·composer
传奇开心果编程18 小时前
【Compose Multiplatform 跨端开发学与练】第6课 状态管理与架构
android·学习·ui·ios·架构·kotlin·composer
事圆则缓18 小时前
Android AOSP 定制常见概念:源码目录、系统镜像与刷机流程
android
传奇开心果编程18 小时前
【Compose Multiplatform 跨端开发学与练】第2课 Compose 基础语法
android·windows·学习·ui·ios·kotlin·composer