Android-Jetpack-Navigation組件使用示例
Navigation的優(yōu)勢(shì)
可能有部分Android開(kāi)發(fā)的小伙伴見(jiàn)過(guò)單Activity多Fragment的App,使用起來(lái)非常的流暢或者說(shuō)非常的絲滑。自己想要嘗試這種開(kāi)發(fā)模式的時(shí)候,又會(huì)發(fā)現(xiàn)Fragment的管理會(huì)比較麻煩?,F(xiàn)在不用怕了,Android SDK為了我們提供了Navigation來(lái)實(shí)現(xiàn)這種開(kāi)發(fā)模式。希望這篇文章對(duì)小伙伴們有所啟發(fā)。
先來(lái)說(shuō)說(shuō)使用Navigation的優(yōu)勢(shì):
- 可以可視化頁(yè)面的導(dǎo)航,可以幫我們快速理清頁(yè)面之間的關(guān)系;
- 通過(guò)
destination和action完成頁(yè)面之間的導(dǎo)航; - 方便我們添加頁(yè)面的切換動(dòng)畫(huà);
- 頁(yè)面之間類(lèi)型安全的參數(shù)傳遞;
- 通過(guò)
NavigationUI類(lèi),對(duì)菜單、底部導(dǎo)航、抽屜菜單導(dǎo)航進(jìn)行統(tǒng)一的管理; - 支持深層鏈接
DeepLink(深層鏈接)。
project的Navigation依賴(lài)設(shè)置
dependencies {
def nav_version = "2.4.2"
classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
}
module的Navigation依賴(lài)設(shè)置
plugins {
id 'androidx.navigation.safeargs'
}
Java版本:
implementation "androidx.navigation:navigation-fragment:2.4.1" implementation "androidx.navigation:navigation-ui:2.4.1"
Kotlin版本:
implementation "androidx.navigation:navigation-fragment-ktx:2.4.1" implementation "androidx.navigation:navigation-ui-ktx:2.4.1"
Compose版本:
implementation "androidx.navigation:navigation-compose:2.4.1"
Navigation的主要因素
Navigation Graph,新型的XML資源文件,其中包含App所有的頁(yè)面,以及頁(yè)面之間的關(guān)系。NavHostFragment,特殊的Fragment,我們可以認(rèn)為是一個(gè)Fragment的容器,Navigation Graph中的Fragment都是通過(guò)NavHostFragment進(jìn)行展示。NavController,在代碼當(dāng)中完成Navigation Graph中的頁(yè)面切換工作。
Navigation代碼示例
1.在res創(chuàng)建navigation資源文件夾,在navigation創(chuàng)建nav_graph.xml文件。
2.在activity_main.xml,內(nèi)容詳情如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<fragment
android:id="@+id/nav_host_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/nav_graph"
app:defaultNavHost="true"/>
</LinearLayout>屬性說(shuō)明如下:
android:name="androidx.navigation.fragment.NavHostFragment",告訴系統(tǒng)這是一個(gè)特殊的Fragment。app:defaultNavHost="true",表示Fragment會(huì)自動(dòng)處理系統(tǒng)返回鍵,當(dāng)用戶(hù)做返回操作的時(shí)候會(huì)退出當(dāng)前的Fragment.app:navGraph="@navigation/nav_graph",導(dǎo)航視圖。
在nav_graph.xml創(chuàng)建兩個(gè)Fragment
<?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="@id/mainFragment">
<fragment
android:id="@+id/mainFragment"
android:name="com.yb.test.MainFragment"
android:label="fragment_main"
tools:layout="@layout/fragment_main">
<action
android:id="@+id/action_mainFragment_to_secondFragment"
app:destination="@id/secondFragment" />
</fragment>
<fragment
android:id="@+id/secondFragment"
android:name="com.yb.test.SecondFragment"
android:label="fragment_second"
tools:layout="@layout/fragment_second" />
</navigation>NavControIIer實(shí)現(xiàn)導(dǎo)航功能
我們?cè)?code>MainFragment中創(chuàng)建按鈕,設(shè)置按鈕的點(diǎn)擊事件:
view.findViewById<Button>(R.id.btn).setOnClickListener {
Navigation.findNavController(it).navigate(R.id.action_mainFragment_to_secondFragment)
}大概的實(shí)現(xiàn)就是這樣子,感興趣的小伙伴可以嘗試一下。
以上就是Android-Jetpack-Navigation組件使用示例的詳細(xì)內(nèi)容,更多關(guān)于Android-Jetpack-Navigation組件的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android Studio 導(dǎo)入開(kāi)源項(xiàng)目的正確姿勢(shì)及注意事項(xiàng)
這篇文章主要介紹了Android Studio 導(dǎo)入開(kāi)源項(xiàng)目的正確姿勢(shì)及注意事項(xiàng),需要的朋友參考下吧2018-03-03
基于Android中的 AutoCompleteTextView實(shí)現(xiàn)自動(dòng)填充
本篇文章小編為大家介紹,基于Android中的 AutoCompleteTextView實(shí)現(xiàn)自動(dòng)填充。需要的朋友參考下2013-04-04
Android 使用AsyncTask實(shí)現(xiàn)多任務(wù)多線(xiàn)程斷點(diǎn)續(xù)傳下載
這篇文章主要介紹了Android 使用AsyncTask實(shí)現(xiàn)多任務(wù)多線(xiàn)程斷點(diǎn)續(xù)傳下載的相關(guān)資料,需要的朋友可以參考下2018-05-05
Android基礎(chǔ)知識(shí)之單點(diǎn)觸摸
這篇文章主要為大家詳細(xì)介紹了Android基礎(chǔ)知識(shí)之單點(diǎn)觸摸,很簡(jiǎn)單的操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
Android開(kāi)發(fā)中實(shí)現(xiàn)應(yīng)用的前后臺(tái)切換效果
這篇文章主要介紹了Android開(kāi)發(fā)中實(shí)現(xiàn)應(yīng)用的前后臺(tái)切換效果的方法,文章最后還附帶了監(jiān)聽(tīng)程序是否進(jìn)入后臺(tái)的判斷方法,需要的朋友可以參考下2016-02-02
Android UI設(shè)計(jì)系列之自定義TextView屬性實(shí)現(xiàn)帶下劃線(xiàn)的文本框(4)
這篇文章主要介紹了Android UI設(shè)計(jì)系列之自定義TextView屬性實(shí)現(xiàn)帶下劃線(xiàn)的文本框,具有一定的實(shí)用性和參考價(jià)值,感興趣的小伙伴們可以參考一下2016-06-06
Android設(shè)置項(xiàng)目為系統(tǒng)APP方法
大家好,本篇文章講的是Android設(shè)置項(xiàng)目為系統(tǒng)APP介紹,感興趣的同學(xué)趕快來(lái)看一看吧,希望本篇文章對(duì)你起到幫助2021-11-11
關(guān)于Android 4.4相機(jī)預(yù)覽、錄像花屏的問(wèn)題的解決方法
這篇文章主要介紹了關(guān)于Android 4.4相機(jī)預(yù)覽、錄像花屏的問(wèn)題的解決方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2016-12-12
Android編程之SurfaceView學(xué)習(xí)示例詳解
這篇文章主要介紹了Android編程之SurfaceView學(xué)習(xí)示例,結(jié)合實(shí)例分析了SurfaceView的功能、使用方法與注意事項(xiàng),具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10

