Jetpack compose NavHost 防止重新组合屏幕

时间:2021-05-18 09:21:56

标签: android kotlin android-jetpack android-jetpack-compose android-jetpack-navigation

如您所见,这就是我使用 MaterialBottomNavigation 实现 NavHost 的方式,我在 MessagesFeed 屏幕上都有很多项目,当我在这两个屏幕之间导航时,它们会自动重新组合,但我不想因为那里有太多数据,它在导航时闪烁并且 fps 下降到 10 以下,我尝试在 NavHost 之前初始化数据视图模型,但结果仍然相同,有什么方法可以一次组合屏幕并在 viewModels 时更新它们数据更新了吗?

@Composable
private fun MainScreenNavigationConfigurations(
    navController: NavHostController,
    messagesViewModel: MessagesViewModel = viewModel(),
    feedsViewModel: FeedsViewModel = viewModel(),

) {

val messages: List<Message> by messagesViewModel.messages.observeAsState(listOf())
val feeds: List<Feed> by feedsViewModel.messages.observeAsState(listOf())

NavHost(
    navController = navController,
    startDestination = "Messages"
) {
    composable("Messages") {
        Messages(navController, messages)
    }
    composable("Feeds") { Feeds(navController, feeds) }
  }
}

1 个答案:

答案 0 :(得分:0)

请在您的代码上方使用此代码。它会记住您当前屏幕的状态。

val navController = rememberNavController()

有关更多信息,请查看: https://developer.android.com/jetpack/compose/navigation