什么是 Navigation Component 以及为什么需要它
\n\nNavigation 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
安装 Navigation Component
\n\n由于 Navigation Component 是一个 Android 库,安装通过 Gradle 构建系统进行,而不是通过 pip 或 npm。在 build.gradle 文件(模块级别,通常是 app/build.gradle)中添加依赖:
// 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 插件:
// build.gradle (Project level)\nplugins {\n id 'androidx.navigation.safeargs.kotlin' version '2.7.7' apply false\n}\n\n\nGradle 同步后,该库即可使用。
\n\n快速入门及代码示例
\n\n让我们创建一个包含两个屏幕的简单应用:HomeFragment 和 DetailFragment。用户点击第一个屏幕上的按钮,跳转到第二个屏幕,并传递一个字符串。
\n\n步骤 1:创建导航文件
\n在 res/navigation 文件夹中创建 nav_graph.xml 文件:
<?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:
<?xml version="1.0" encoding="utf-8"?>\n<androidx.constraintlayout.widget.ConstraintLayout\n xm