Navigation Component 用于 Kotlin:完整指南及示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

什么是 Navigation Component 以及为什么需要它

\n\n

Navigation Component 是 Google 为 Android 开发的一个库,旨在简化 Kotlin 和 Java 应用中屏幕(Fragment、Activity、对话框)之间的导航。它是 Android Jetpack 的一部分,提供了一种统一、可预测的方式来管理页面跳转、处理参数以及处理“返回”按钮。

\n\n

为什么需要它? 没有 Navigation Component,开发者通常需要编写大量样板代码:创建 FragmentManager、处理 BackStack、通过 Bundle 传递数据以及跟踪页面跳转状态。该库通过提供以下功能解决了这些问题:

\n
    \n
  • 可视化导航编辑器 — 在 XML 中定义导航图。
  • \n
  • 安全的参数传递 — 通过 Safe Args(Gradle 插件)。
  • \n
  • 自动管理 BackStack — “返回”按钮能正确工作。
  • \n
  • 深层链接 (Deep Links) — 从通知或外部链接进行跳转。
  • \n
  • 页面跳转动画 — 在 XML 中简单配置。
  • \n
\n\n

安装 Navigation Component

\n\n

由于 Navigation Component 是一个 Android 库,安装通过 Gradle 构建系统进行,而不是通过 pip 或 npm。在 build.gradle 文件(模块级别,通常是 app/build.gradle)中添加依赖:

\n\n
// build.gradle (Module: app)\nplugins {\n    id 'com.android.application'\n    id 'org.jetbrains.kotlin.android'\n    id 'androidx.navigation.safeargs.kotlin' // 用于 Safe Args\n}\n\nandroid {\n    // ... 标准配置\n}\n\ndependencies {\n    implementation 'androidx.navigation:navigation-fragment-ktx:2.7.7'\n    implementation 'androidx.navigation:navigation-ui-ktx:2.7.7'\n    // 用于动态功能模块 (Feature Modules)\n    implementation 'androidx.navigation:navigation-dynamic-features-fragment:2.7.7'\n}\n
\n\n

同时,确保在根目录的 build.gradle 中添加了 Safe Args 插件:

\n\n
// build.gradle (Project level)\nplugins {\n    id 'androidx.navigation.safeargs.kotlin' version '2.7.7' apply false\n}\n
\n\n

Gradle 同步后,该库即可使用。

\n\n

快速入门及代码示例

\n\n

让我们创建一个包含两个屏幕的简单应用:HomeFragment 和 DetailFragment。用户点击第一个屏幕上的按钮,跳转到第二个屏幕,并传递一个字符串。

\n\n

步骤 1:创建导航文件

\n

在 res/navigation 文件夹中创建 nav_graph.xml 文件:

\n\n
<?xml version="1.0" encoding="utf-8"?>\n<navigation xmlns:android="http://schemas.android.com/apk/res/android"\n    xmlns:app="http://schemas.android.com/apk/res-auto"\n    xmlns:tools="http://schemas.android.com/tools"\n    android:id="@+id/nav_graph"\n    app:startDestination="@id/homeFragment">\n\n    <fragment\n        android:id="@+id/homeFragment"\n        android:name="com.example.app.HomeFragment"\n        android:label="Home"\n        tools:layout="@layout/fragment_home">\n        <action\n            android:id="@+id/action_homeFragment_to_detailFragment"\n            app:destination="@id/detailFragment" />\n    </fragment>\n\n    <fragment\n        android:id="@+id/detailFragment"\n        android:name="com.example.app.DetailFragment"\n        android:label="Detail"\n        tools:layout="@layout/fragment_detail">\n        <argument\n            android:name="message"\n            app:argType="string" />\n    </fragment>\n</navigation>\n
\n\n

步骤 2:配置 Activity

\n

在 activity_main.xml 中添加 NavHostFragment:

\n\n
<?xml version="1.0" encoding="utf-8"?>\n<androidx.constraintlayout.widget.ConstraintLayout\n    xm                    

推荐