You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 22:45:30