前言
有一段時間沒有系統(tǒng)的學習一種android技術了,最近查了一下android的最新技術,感覺都是在講jetpack,于是就打算學習一下。
花了兩天時間學習了一下JetPack - Navagation,在這記錄一下。
概念
Navigation是一個可簡化Android導航的庫和插件。
更確切的來說,Navigation是用來管理Fragment的切換,并且可以通過可視化的方式,看見App的交互流程
優(yōu)點
- 處理Fragment的切換(上文已說過)
- 默認情況下正確處理Fragment的前進和后退
- 為過渡和動畫提供標準化的資源
- 實現(xiàn)和處理深層連接
- 可以綁定Toolbar、BottomNavigationView和ActionBar等
- SafeArgs(Gradle插件) 數(shù)據(jù)傳遞時提供類型安全性
- ViewModel支持
添加依賴
implementation "androidx.navigation:navigation-fragment-ktx:$rootProject.navigationVersion"
implementation "androidx.navigation:navigation-ui-ktx:$rootProject.navigationVersion"
創(chuàng)建導航圖
在“Project”窗口中,右鍵點擊 res 目錄,然后依次選擇 New > Android Resource File。此時系統(tǒng)會顯示 New Resource File 對話框。
在 File name 字段中輸入名稱,例如“nav_graph”。
-
從 Resource type 下拉列表中選擇 Navigation,然后點擊 OK。
當您添加首個導航圖時,Android Studio 會在 res 目錄內創(chuàng)建一個 navigation 資源目錄。該目錄包含您的導航圖資源文件(例如 nav_graph.xml)。ps:也可以直接在res下面創(chuàng)建名為navigation的文件夾,然后右鍵new一個navigation resource file。
創(chuàng)建好的導航圖如下所示:
1.png
點擊可添加destination,這里我們準備好三個fragment,分別是LoginFragment,RegisterFragment,WelcomeFragment。
添加destination后的導航圖如下所示:

指定起始destination:
您可以右鍵點擊該目的地,然后點擊 Set as Start Destination
代碼如下:
<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/login_navigation"
app:startDestination="@id/welcomeFragment">
...
</navigation>
下面我們可以連接destination:
1,在 Design 標簽頁中,將鼠標懸停在目的地的右側,該目的地為您希望用戶從中導航出來的目的地。該目的地右側上方會顯示一個圓圈。
2,點擊您希望用戶導航到的目的地,并將光標拖動到該目的地的上方,然后松開。
操作之后,xml文件會自動生成相應的代碼:
<fragment
android:id="@+id/welcomeFragment"
android:name="com.aron.learning.fragment.WelcomeFragment"
android:label="WelcomeFragment"
tools:layout="@layout/fragment_welcome">
<action
android:id="@+id/action_welcomeFragment_to_loginFragment"
app:destination="@id/loginFragment" />
<action
android:id="@+id/action_welcomeFragment_to_registerFragment"
app:destination="@id/registerFragment" />
</fragment>
