kotlin 返回后返回可组合时的组合导航句柄

vxqlmq5t  于 2022-12-13  发布在  Kotlin
关注(0)|答案(2)|浏览(181)

假设我有两个屏幕HomeScreenDetailScreen,并使用合成导航在屏幕之间导航。
图为HomeScreen-〉DetailScreen
当我按下DetailScreen返回到HomeScreen时,我希望HomeScreen对此做出React,并且必须调用一些方法。我希望HomeScreen可组合每次在屏幕上出现时都调用一些方法。如何实现这一点?

NavHost(
        navController = navController,
        startDestination = "Home"
    ) {
        composable("Home") {
            HomeScreen(
                onDetailClick= {
                    navController.navigate("Detail")
                }
            )
        }
        composable("Detail") {
            DetailScreen(
                onBackClick= {
                    navController.popBackStack()
                },
            )
        }
}
pqwbnv8z

pqwbnv8z1#

您应该使用NavHostController.navigateUp()而不是NavHostController.popBackStack(),然后您可以使用LaunchedEffect和固定值(如Unit)作为密钥。

@Composable
HomeScreen() {
    LaunchedEffect(key1 = Unit) {
        Log.i("HomeScreen", "home screen visible")

        // call your methods here
    }
    
    // the rest of HomeScreen code
}

但要小心,因为每次发生配置更改时,也会重新执行。

xdyibdwo

xdyibdwo2#

这取决于你如何回到主屏幕.如果你使用navController.navigete("home")那么

@Composable
HomeScreen() {
    LaunchedEffect(key1 = true) {
        Log.i("HomeScreen", "home screen visible")

        // call your methods here
    }
    
    // the rest of HomeScreen code  
}

它将工作得很好。
或者如果您使用的是navController.popBackStack(),则它将不起作用。
为此,您需要首先使用navController.popBackStack()导航到主页,然后使用navController.navigete("home")
示例-〉

navController.popBackStack()
navController.navigete("home")

相关问题