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" />
相关推荐
NiceCloud喜云7 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
日光明媚11 小时前
一步生成视频!One-Forcing:DMD + 零成本 GAN,训练 200 步超越多步 SOTA
android·开发语言·kotlin
帅次12 小时前
Android 17 开发者实战:核心更新与应用场景落地指南
android·java·ios·android studio·iphone·android jetpack·webview
大鹏说大话12 小时前
SQL 排序与分组实战:解决“分组后取最新数据“
android·java·数据库
搜狐技术产品小编202315 小时前
破局与重构:纯端侧 Android 自动化引擎的尝试与未来推演
android·运维·重构·自动化
码云骑士16 小时前
Android SystemServer启动过程
android·systemserver
weiggle17 小时前
第三篇:可组合函数(Composable)——Compose 的基石
android·前端
独隅17 小时前
Android Studio 接入多种不同 AI 大模型进行开发的全面详细指南(Android Studio+AI)
android·人工智能·android studio
夜微凉418 小时前
三、MySQL
android·数据库·mysql
我命由我1234518 小时前
Android 开发问题:项目同时引入了两个包含相同类文件的库(AndroidX 库、旧版本支持库),导致了重复类错误
android·java·java-ee·android studio·android-studio·androidx·android runtime