網站首頁 編程語言 正文
Navigation 快速上手
下面案例簡要展示使用 Compose 版本的 Navigation 庫來實現兩個頁面之間的跳轉
這是完整的結構(忽略掉紅線劃過的那個包)
編寫欲跳轉的兩個頁面
編寫 Demo1 頁面
子頁面使用多個 composable
組件相組合的方法一一裝配起來
Demo1main
渲染整個頁面,他接受一個 NavController
對象,用于操縱導航相關的方法
可以注意到 Button 里面的點擊事件還沒寫,后續(xù)我們寫好路由后再回來編寫跳轉邏輯
@Composable fun Demo1main(navController: NavController) { body(navController) } @Composable private fun body(navController: NavController) { Column( modifier = Modifier .fillMaxSize() ) { Button(onClick = { // 跳轉邏輯 }) { 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 = { // 這里也寫跳轉邏輯! }) { Text( text = "前往demo1", modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center ) } } }
路由表配置
編寫單例類 RouteConfig 用來存儲路由名稱(等同于 vue-router 中我們設置的 path)
后續(xù)為便于理解,統(tǒng)稱為 path
object RouteConfig { // 主頁面 const val ROUTE_MAIN = "main" // 兩個跳轉頁面 const val ROUTE_DEMO1 = "demo1" const val ROUTE_DEMO2 = "demo2" }
總路由
創(chuàng)建文件 MainNav 并在里面實現路由導航的總邏輯
由于我們剛剛入門,路由表可以很簡單,按照以下結構即可
- rememberNavController 存儲所有 navcontroller 狀態(tài)
- NavHost 一個容器,便于內部頁面的切換,在里面注冊所有頁面
@Composable fun AppNav() { // 存儲navigation狀態(tài) val navController = rememberNavController() // navhost容器 // startDestination表示起始頁的path,這里我們指定demo1作為起始頁 NavHost(navController = navController, startDestination = RouteConfig.ROUTE_DEMO1) { // 依次傳入path并注冊三個頁面 composable(RouteConfig.ROUTE_MAIN) { MainActivity() } composable(RouteConfig.ROUTE_DEMO1) { Demo1main(navController) } composable(RouteConfig.ROUTE_DEMO2) { Demo2main(navController) } } }
主頁面調用總路由
對于 kotlin 而言,非常簡單,直接調用定義好的總路由方法即可
因為總路由默認起始頁為 demo1,故渲染 mainactivity 后就會立即載入 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 ) { // 一鍵調用,方便快捷 AppNav() } } } } }
跳轉邏輯完善
嘿!還記得我們之前置空的按鈕跳轉邏輯嗎?
我們已經配置完了所有路由,為此,僅需將以下代碼添加到按鈕點擊事件即可跳轉到指定頁面了!
// 寫于demo1頁面,點擊按鈕后跳轉到demo2頁面 navController.navigate(RouteConfig.ROUTE_DEMO2)
為便于大家理解,現給出 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 的跳轉邏輯只需要修改對應的 path 即可
目前僅學到了最簡單的 navigate 跳轉,后續(xù)還有帶參跳轉,請關注進階版本!
原文鏈接:https://blog.csdn.net/delete_you/article/details/128068772
相關推薦
- 2022-04-08 Swift使用表格組件實現單列表_Swift
- 2022-08-20 Android自定義可控制速度的跑馬燈_Android
- 2023-05-30 python?snap7讀寫PLC的操作方法_python
- 2022-10-05 Android?Flutter實現原理淺析_Android
- 2022-10-09 Python?局部變量global詳解_python
- 2022-09-23 Redux中異步action與同步action的使用_React
- 2022-05-25 C語言中操作字符串的函數詳解_C 語言
- 2022-11-09 Go語言如何使用golang-jwt/jwt/v4進行JWT鑒權詳解_Golang
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支