前言
有一段時(shí)間沒有系統(tǒng)的學(xué)習(xí)一種android技術(shù)了,最近查了一下android的最新技術(shù)导犹,感覺都是在講jetpack唱凯,于是就打算學(xué)習(xí)一下。
花了兩天時(shí)間學(xué)習(xí)了一下JetPack - Navagation谎痢,在這記錄一下磕昼。
概念
Navigation是一個(gè)可簡(jiǎn)化Android導(dǎo)航的庫(kù)和插件。
更確切的來(lái)說节猿,Navigation是用來(lái)管理Fragment的切換票从,并且可以通過可視化的方式,看見App的交互流程
優(yōu)點(diǎn)
- 處理Fragment的切換(上文已說過)
- 默認(rèn)情況下正確處理Fragment的前進(jìn)和后退
- 為過渡和動(dòng)畫提供標(biāo)準(zhǔn)化的資源
- 實(shí)現(xiàn)和處理深層連接
- 可以綁定Toolbar滨嘱、BottomNavigationView和ActionBar等
- SafeArgs(Gradle插件) 數(shù)據(jù)傳遞時(shí)提供類型安全性
- ViewModel支持
添加依賴
implementation "androidx.navigation:navigation-fragment-ktx:$rootProject.navigationVersion"
implementation "androidx.navigation:navigation-ui-ktx:$rootProject.navigationVersion"
創(chuàng)建導(dǎo)航圖
在“Project”窗口中峰鄙,右鍵點(diǎn)擊 res 目錄,然后依次選擇 New > Android Resource File太雨。此時(shí)系統(tǒng)會(huì)顯示 New Resource File 對(duì)話框吟榴。
在 File name 字段中輸入名稱,例如“nav_graph”囊扳。
-
從 Resource type 下拉列表中選擇 Navigation吩翻,然后點(diǎn)擊 OK兜看。
當(dāng)您添加首個(gè)導(dǎo)航圖時(shí),Android Studio 會(huì)在 res 目錄內(nèi)創(chuàng)建一個(gè) navigation 資源目錄狭瞎。該目錄包含您的導(dǎo)航圖資源文件(例如 nav_graph.xml)细移。ps:也可以直接在res下面創(chuàng)建名為navigation的文件夾,然后右鍵new一個(gè)navigation resource file熊锭。
創(chuàng)建好的導(dǎo)航圖如下所示:
1.png
點(diǎn)擊可添加destination葫哗,這里我們準(zhǔn)備好三個(gè)fragment,分別是LoginFragment球涛,RegisterFragment劣针,WelcomeFragment。
添加destination后的導(dǎo)航圖如下所示:
指定起始destination:
您可以右鍵點(diǎn)擊該目的地亿扁,然后點(diǎn)擊 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 標(biāo)簽頁(yè)中,將鼠標(biāo)懸停在目的地的右側(cè)从祝,該目的地為您希望用戶從中導(dǎo)航出來(lái)的目的地襟己。該目的地右側(cè)上方會(huì)顯示一個(gè)圓圈。
2牍陌,點(diǎn)擊您希望用戶導(dǎo)航到的目的地擎浴,并將光標(biāo)拖動(dòng)到該目的地的上方,然后松開毒涧。
操作之后贮预,xml文件會(huì)自動(dòng)生成相應(yīng)的代碼:
<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>