JetpackCompose Navigation導(dǎo)航實(shí)現(xiàn)流程
Navigation 快速上手
下面案例簡(jiǎn)要展示使用 Compose 版本的 Navigation 庫來實(shí)現(xiàn)兩個(gè)頁面之間的跳轉(zhuǎn)
這是完整的結(jié)構(gòu)(忽略掉紅線劃過的那個(gè)包)

編寫欲跳轉(zhuǎn)的兩個(gè)頁面
編寫 Demo1 頁面
子頁面使用多個(gè) composable 組件相組合的方法一一裝配起來
Demo1main 渲染整個(gè)頁面,他接受一個(gè) NavController 對(duì)象,用于操縱導(dǎo)航相關(guān)的方法
可以注意到 Button 里面的點(diǎn)擊事件還沒寫,后續(xù)我們寫好路由后再回來編寫跳轉(zhuǎn)邏輯
@Composable
fun Demo1main(navController: NavController) {
body(navController)
}
@Composable
private fun body(navController: NavController) {
Column(
modifier = Modifier
.fillMaxSize()
) {
Button(onClick = {
// 跳轉(zhuǎn)邏輯
}) {
Text(
text = "前往demo2",
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center
)
}
}
}
編寫 Demo2 頁面
依葫蘆畫瓢
@Composable
fun Demo2main(navController: NavController) {
body(navController)
}
@Composable
private fun body(navController: NavController) {
Column(
modifier = Modifier
.fillMaxSize()
) {
Button(onClick = {
// 這里也寫跳轉(zhuǎn)邏輯!
}) {
Text(
text = "前往demo1",
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center
)
}
}
}
路由表配置
編寫單例類 RouteConfig 用來存儲(chǔ)路由名稱(等同于 vue-router 中我們?cè)O(shè)置的 path)
后續(xù)為便于理解,統(tǒng)稱為 path
object RouteConfig {
// 主頁面
const val ROUTE_MAIN = "main"
// 兩個(gè)跳轉(zhuǎn)頁面
const val ROUTE_DEMO1 = "demo1"
const val ROUTE_DEMO2 = "demo2"
}
總路由
創(chuàng)建文件 MainNav 并在里面實(shí)現(xiàn)路由導(dǎo)航的總邏輯
由于我們剛剛?cè)腴T,路由表可以很簡(jiǎn)單,按照以下結(jié)構(gòu)即可
- rememberNavController 存儲(chǔ)所有 navcontroller 狀態(tài)
- NavHost 一個(gè)容器,便于內(nèi)部頁面的切換,在里面注冊(cè)所有頁面
@Composable
fun AppNav() {
// 存儲(chǔ)navigation狀態(tài)
val navController = rememberNavController()
// navhost容器
// startDestination表示起始頁的path,這里我們指定demo1作為起始頁
NavHost(navController = navController, startDestination = RouteConfig.ROUTE_DEMO1) {
// 依次傳入path并注冊(cè)三個(gè)頁面
composable(RouteConfig.ROUTE_MAIN) {
MainActivity()
}
composable(RouteConfig.ROUTE_DEMO1) {
Demo1main(navController)
}
composable(RouteConfig.ROUTE_DEMO2) {
Demo2main(navController)
}
}
}
主頁面調(diào)用總路由
對(duì)于 kotlin 而言,非常簡(jiǎn)單,直接調(diào)用定義好的總路由方法即可
因?yàn)榭偮酚赡J(rèn)起始頁為 demo1,故渲染 mainactivity 后就會(huì)立即載入 demo1 頁面!
class MainActivity() : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
DemoComposeTheme {
// A surface container using the 'background' color from the theme
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colors.background
) {
// 一鍵調(diào)用,方便快捷
AppNav()
}
}
}
}
}
跳轉(zhuǎn)邏輯完善
嘿!還記得我們之前置空的按鈕跳轉(zhuǎn)邏輯嗎?
我們已經(jīng)配置完了所有路由,為此,僅需將以下代碼添加到按鈕點(diǎn)擊事件即可跳轉(zhuǎn)到指定頁面了!
// 寫于demo1頁面,點(diǎn)擊按鈕后跳轉(zhuǎn)到demo2頁面 navController.navigate(RouteConfig.ROUTE_DEMO2)
為便于大家理解,現(xiàn)給出 demo1.kt 目前的完整代碼
@Composable
fun Demo1main(navController: NavController) {
body(navController)
}
@Composable
private fun body(navController: NavController) {
Column(
modifier = Modifier
.fillMaxSize()
) {
Button(onClick = {
navController.navigate(RouteConfig.ROUTE_DEMO2)
}) {
Text(
text = "前往demo2",
modifier = Modifier.fillMaxWidth(),
textAlign = TextAlign.Center
)
}
}
}
demo2 的跳轉(zhuǎn)邏輯只需要修改對(duì)應(yīng)的 path 即可
目前僅學(xué)到了最簡(jiǎn)單的 navigate 跳轉(zhuǎn),后續(xù)還有帶參跳轉(zhuǎn),請(qǐng)關(guān)注進(jìn)階版本!
到此這篇關(guān)于JetpackCompose Navigation導(dǎo)航實(shí)現(xiàn)流程的文章就介紹到這了,更多相關(guān)JetpackCompose Navigation內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android之RecyclerView實(shí)現(xiàn)時(shí)光軸效果示例
本篇文章主要介紹了Android之RecyclerView實(shí)現(xiàn)時(shí)光軸效果,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-02-02
Android實(shí)現(xiàn)屏蔽微信拉黑和刪除聯(lián)系人功能示例
本篇文章主要介紹了Android實(shí)現(xiàn)屏蔽微信拉黑和刪除聯(lián)系人功能示例,具有一定的參考價(jià)值,有興趣的可以了解一下。2017-02-02
用MOB實(shí)例開發(fā)實(shí)現(xiàn)短信驗(yàn)證功能
本篇文章通學(xué)習(xí)通過MOB平臺(tái)開發(fā)APP實(shí)現(xiàn)簡(jiǎn)單的短信驗(yàn)證功能,對(duì)此有需求的朋友跟著好好學(xué)習(xí)下吧。2018-01-01
Android應(yīng)用程序保持后臺(tái)喚醒(使用WakeLock實(shí)現(xiàn))
本篇文章主要介紹了使用WakeLock使Android應(yīng)用程序保持后臺(tái)喚醒的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧2017-04-04
Android通過ViewModel保存數(shù)據(jù)實(shí)現(xiàn)多頁面的數(shù)據(jù)共享功能
這篇文章主要介紹了Android通過ViewModel保存數(shù)據(jù)實(shí)現(xiàn)多頁面的數(shù)據(jù)共享功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
Android fragment實(shí)現(xiàn)多個(gè)頁面切換效果
這篇文章主要為大家詳細(xì)介紹了fragment實(shí)現(xiàn)多個(gè)頁面切換效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04
Android編程實(shí)現(xiàn)ListView頭部ViewPager廣告輪詢圖效果
這篇文章主要介紹了Android編程實(shí)現(xiàn)ListView頭部ViewPager廣告輪詢圖效果,較為詳細(xì)的分析了自定義ListView實(shí)現(xiàn)ViewPager廣告圖輪詢的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
Android實(shí)現(xiàn)帶磁性的懸浮窗體效果
這篇文章主要介紹了Android實(shí)現(xiàn)帶磁性的懸浮窗體效果,涉及Android針對(duì)窗體的動(dòng)態(tài)操作相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07

