Jetpack compose NavHost 防止重组屏幕

Jac*_*son 7 android kotlin android-jetpack android-jetpack-navigation android-jetpack-compose

正如你所看到的,这就是我使用 MaterialBottomNavigation 实现 NavHost 的方式,我在消息提要屏幕上都有很多项目,当我在这两个屏幕之间导航时,它们会自动重新组合,但我不想,因为那里有太多数据,它会闪烁并且 fps 下降导航时低于 10,我尝试在 NavHost 之前初始化数据 viewModel,但结果仍然相同,有没有办法一次性组合屏幕并在 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) }
  }
}
Run Code Online (Sandbox Code Playgroud)

小智 0

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

val navController = rememberNavController()
Run Code Online (Sandbox Code Playgroud)

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