Jetpack Compose中如何在HorizontalPager中传递NavController
实现步骤
要让ViewScreen能访问NavController,需要从类型定义、TabItem实现到TabsContent调用全链路调整参数传递,具体如下:
1. 修改可组合函数类型别名,支持接收NavController
原来的ComposableFun是无参类型,现在改成带NavController参数的版本:
typealias ComposableFun = @Composable (NavController) -> Unit
2. 更新MyTabItem的定义与实现
调整MyTabItem构造函数中screen参数的类型,并在具体Tab实现中传递NavController给对应页面:
sealed class MyTabItem( var icon_filled: Int, var icon_unfilled: Int, var title: String, var screen: ComposableFun, // 类型已更新 ) { object View : MyTabItem( R.drawable.ic_view, R.drawable.ic_view, "View", { navController -> ViewScreen(navController) }, // 传递NavController ) object Save: MyTabItem( R.drawable.ic_add_save, R.drawable.ic_add_save, "Save", { _ -> CreateScreen() }, // 若CreateScreen不需要NavController,可忽略参数 ) }
3. 修改TabsContent函数,接收并传递NavController
给TabsContent添加NavController参数,在调用页面可组合函数时传入:
@Composable fun TabsContent(tabs: List<MyTabItem>, pagerState: PagerState, navController: NavController) { HorizontalPager(state = pagerState, pageCount = tabs.size) { page -> tabs[page].screen(navController) // 传递NavController给页面 } }
4. 更新ViewScreen,接收并使用NavController
修改ViewScreen的定义,添加NavController参数,即可在内部使用导航功能:
@Composable fun ViewScreen(navController: NavController) { // 示例:使用navController进行导航 Button(onClick = { navController.navigate("target_route") }) { Text("跳转到目标页面") } }
内容的提问来源于stack exchange,提问作者srituts
相关产品推荐
相关产品推荐

