1.Navigation是什么?
官方文档中的介绍
Navigation 是一个框架,用于在 Android 应用中的“目标”之间导航,该框架提供一致的 API,无论目标是作为 Fragment、Activity 还是其他组件实现。
那它其实就是一个对 Fragment / Activity 进行统一调度跳转的组件库,
2.Navigation怎么用?
第一步、module中添加依赖。
def nav_version = "2.4.1"
// Java language implementation
implementation "androidx.navigation:navigation-fragment:$nav_version"
implementation "androidx.navigation:navigation-ui:$nav_version"
第二步,建立一个Activity 和 多个Fragment 在Activity的xml布局上引入<\fragment>标签;这里面有3个字段跟普通view不一样。
<fragment
android:id="@+id/fragment_main"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/nav_graph" />
① android:name=“androidx.navigation.fragment.NavHostFragment”
② app:defaultNavHost=“true”
设置打开回退栈
③ app:navGraph="@navigation/nav_graph"”
引用navigation布局
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@layout/fragment_a">
<action
android:id="@+id/action_fmta_to_fmtb"
app:destination="@id/fmt_a"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim" />
<action
android:id="@+id/action_fmtb_to_fmtc"
app:destination="@id/fmt_b"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim" />
<action
android:id="@+id/action_fmtc_to_fmtd"
app:destination="@id/fmt_c"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim" />
<action
android:id="@+id/action_fmtd_to_fmta"
app:destination="@id/fmt_d"
app:enterAnim="@anim/nav_default_enter_anim"
app:exitAnim="@anim/nav_default_exit_anim" />
<!-- 一个faragment、activity代表一个目标 fragment,activity-->
<fragment
android:id="@+id/fmt_a"
android:name="com.socket.navigation.FragmentA"
android:label="AAAA"
tools:layout="@layout/fragment_a" />
<fragment
android:id="@+id/fmt_b"
android:name="com.socket.navigation.FragmentB"
android:label="BBBB"
tools:layout="@layout/fragment_b" />
<fragment
android:id="@+id/fmt_c"
android:name="com.socket.navigation.FragmentC"
android:label="CCCC"
tools:layout="@layout/fragment_c" />
<fragment
android:id="@+id/fmt_d"
android:name="com.socket.navigation.FragmentD"
android:label="DDDD"
tools:layout="@layout/fragment_d" />
<argument
android:name="demo"
android:defaultValue="TEST_STATIC_PARPMS" />
<deepLink app:uri="http://www.kerwinwebsite.com/{params}" />
</navigation>