在 Jetpack Compose Navigation 中返回可组合项时,如何确保其中的数据刷新?

Maa*_*arS 6 android kotlin android-jetpack-compose jetpack-compose-navigation

我有一个可组合项,需要在调用时从本地房间数据库中获取一些数据。当我导航到另一个可组合项然后导航回来时,它应该再次获取数据。

我在 LaunchedEffect 块中获取数据。我正在使用Compose Destinations Library 进行导航。

@Composable
fun DataScreen(navigator: DestinationsNavigator) {
    val viewModel = viewModel<DataScreenViewModel>()
    LaunchedEffect(Unit) {
        viewModel.fetchData()
    }

    Button(onClick = { navigator.navigate(EditScreenDestination) }) {
        Text("Edit")
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我离开此可组合项并使用导航回到它时,navigator.popBackStack()我想重新获取数据,因为它可能已更改。

有没有办法可以检测到用户在我的 DataScreen 可组合项中导航回来?
或者有没有更好的方法来实现这一点。

小智 0

这将有助于分享更多有关项目结构的背景信息,因为可能有更优雅的选项,但无论如何,您有一些应该有效的选项。

您似乎正在使用片段或活动,因此您可以执行以下任一操作:

  1. 将 ViewModel 注册为 Fragment 或 Activity 的生命周期观察者,并在调用 onStart 时执行新的获取
  2. fetchData在 onStart 回调中进行 Fragment 或 Activity 调用

对于这两个选项,您都需要从可组合项中删除“LaunchedEffect”块

  • 这不起作用,因为我只是在可组合项之间导航,而不是在片段或活动之间导航。 (2认同)