1.Jetpack系列之 ---- Navigation原理分析

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>

3.Navigation核心原理分析

上一篇:小试YARP


下一篇:java 泛型