kotlin 如何在其他navHost之间导航

jjhzyzn0  于 11个月前  发布在  Kotlin
关注(0)|答案(2)|浏览(161)

我的根图

@Composable
fun RootNavigationGraph(navController: NavHostController) {
    NavHost(
        navController = navController,
        startDestination = RootScreen.Welcome.route
    ) {
        welcomeGraph(navController)
        authGraph(navController)
        composable(route = RootScreen.Main.route) {
            MainScreen()
        }
        trackingGraph(navController)
    }
}

字符串

我的主图

此为底部导航

@Composable
fun MainNavigationGraph(navController: NavHostController) {
    NavHost(
        navController = navController,
        startDestination = RootScreen.Dashboard.route,
        route = RootScreen.Main.route
    ) {
        dashboardGraph(navController)
        orderGraph(navController)
        profileGraph(navController)
    }
}

我的可组合视图

在dashboardGraph @Composable中 Package 的DashboardScreen中的代码是functionsCardList(items:List,navController:NavController){

LazyRow(horizontalArrangement = Arrangement.spacedBy(16.dp)) {
        items(items) { menus ->
            FeatureCardItemSingle(
                item = menus,
                onClick = {
                    Log.d("FeatureCardList", "Clicked item: ${menus.move_to}")
                    navController.navigate(RootScreen.Tracking.route)
                }
            )
        }
    }
}

3zwjbxry

3zwjbxry1#

您需要使用嵌套导航图

@Composable
fun RootNavigationGraph(navController: NavHostController) {
    NavHost(
        navController = navController,
        startDestination = RootScreen.Welcome.route,
        nestedNavGraphs = listOf(
            NavGraph(
                route = RootScreen.Main.route,
                startDestination = RootScreen.Dashboard.route
            ) {
                mainGraph(navController)
            }
        )
    ) {
        welcomeGraph(navController)
        authGraph(navController)
        composable(route = RootScreen.Main.route) {
            MainScreen()
        }
        trackingGraph(navController)
    }
}

字符串
然后在你的卡片中导航

@Composable
fun FeatureCardList(items: List<Menu>, navController: NavController) {
    LazyRow(horizontalArrangement = Arrangement.spacedBy(16.dp)) {
        items(items) { menu ->
            FeatureCardItemSingle(
                item = menu,
                onClick = {
                    Log.d("FeatureCardList", "Clicked item: ${menu.move_to}")
                    navController.navigate(RootScreen.Main.route + "/${RootScreen.Tracking.route}")
                }
            )
        }
    }
}

6tdlim6h

6tdlim6h2#

导入必要的依赖:

import androidx.navigation.NavController
import androidx.navigation.compose.navigate

字符串

在您的FeatureCardList composable中,您可以使用navController参数导航到RootScreen.Tracking.route。但是,由于您希望在导航图之间导航,因此您需要提供一种方法来访问FeatureCardList中根导航图的NavHostController

实现这一点的一种方法是让RootNavigationGraph可组合记住它的trackingGraphnavController。你可以将这个navController作为参数传递给你的FeatureCardList。下面是一个例子:

@Composable
fun RootNavigationGraph(navController: NavHostController) {
    // ...
    trackingGraph(navController.createSubNavController(RootScreen.Tracking.route))
    // ...
}

@Composable
fun FeatureCardList(items: List, navController: NavController) {
    LazyRow(horizontalArrangement = Arrangement.spacedBy(16.dp)) {
        items(items) { menus ->
            FeatureCardItemSingle(
                item = menus,
                onClick = {
                    Log.d("FeatureCardList", "Clicked item: ${menus.move_to}")
                    navController.navigate(RootScreen.Tracking.route)
                }
            )
        }
    }
}

  • 在本例中,我们从RootScreen.Tracking.route特定的主navController创建了一个子navController。现在,您可以使用此子navController在根导航图的trackingGraph中导航。*

相关问题