網站首頁 編程語言 正文
Navigation 快速上手
下面案例簡要展示使用 Compose 版本的 Navigation 庫來實現兩個頁面之間的跳轉
這是完整的結構(忽略掉紅線劃過的那個包)
編寫欲跳轉的兩個頁面
編寫 Demo1 頁面
子頁面使用多個 composable
組件相組合的方法一一裝配起來
Demo1main
渲染整個頁面,他接受一個 NavController
對象,用于操縱導航相關的方法
可以注意到 Button 里面的點擊事件還沒寫,后續我們寫好路由后再回來編寫跳轉邏輯
@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)
后續為便于理解,統稱為 path
object RouteConfig { // 主頁面 const val ROUTE_MAIN = "main" // 兩個跳轉頁面 const val ROUTE_DEMO1 = "demo1" const val ROUTE_DEMO2 = "demo2" }
總路由
創建文件 MainNav 并在里面實現路由導航的總邏輯
由于我們剛剛入門,路由表可以很簡單,按照以下結構即可
- rememberNavController 存儲所有 navcontroller 狀態
- NavHost 一個容器,便于內部頁面的切換,在里面注冊所有頁面
@Composable fun AppNav() { // 存儲navigation狀態 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 跳轉,后續還有帶參跳轉,請關注進階版本!
原文鏈接:https://blog.csdn.net/delete_you/article/details/128068772
相關推薦
- 2022-11-15 Rust使用kind進行異常處理(錯誤的分類與傳遞)_相關技巧
- 2022-06-26 Go語言開源庫實現Onvif協議客戶端設備搜索_Golang
- 2022-03-20 C語言輸出任意邊長的菱形(用c語言輸出一個菱形)
- 2022-06-01 Android實現從相冊選擇照片功能_Android
- 2022-02-24 Android基礎之隱藏標題欄/設置為全屏/橫豎屏切換_Android
- 2023-01-31 iOS?底層alloc?init?new?源碼流程示例分析_IOS
- 2023-07-28 el-tab 切換時添加動畫
- 2022-02-12 uni-app 自定義導航欄 圖片按鈕
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支