【问题标题】:How to prevent LazyColumn reset position in Jetpack compose when navigating between bottom nav tabs?在底部导航选项卡之间导航时,如何防止 Jetpack compose 中的 LazyColumn 重置位置?
【发布时间】:2021-05-28 14:14:43
【问题描述】:
@Composable
fun HomeScreen(){
    val popularListState = rememberLazyListState()
    val viewModel: HomeViewModel = hiltNavGraphViewModel()
    val popularMovies: List<Movie> by viewModel.popularMoviesLiveData.observeAsState(emptyList())
    LazyColumn(
        state = popularListState
    ) {
        itemsIndexed(movies) { _, movie ->
            HomeMovieComponent(movie = movie)
        }
    }
}

每当从底部导航导航到其他屏幕时,惰性列会将滚动位置重置为顶部

Followed this guide to setup the bottom nav

【问题讨论】:

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


    【解决方案1】:

    每当您选择 BottomNavigationItem 时,您的可组合物被其他可组合物替换,并且当您选择返回时,它会再次重新初始化。要恢复以前的可组合使用 saveState = truerestoreState = true 在您的 BottomNavigationItem

    BottomNavigationItem(
        icon = { /*Some Icon*/ },
        label = { /*Some Text*/ },
        selected = currentRoute == item.route,
        onClick = {
          navController.navigate(item.route) {
            // Put These line in your code.
            popUpTo(navController.graph.startDestinationId) {
              saveState = true
            }
            launchSingleTop = true
            restoreState = true
          }
      }
    )
    

    【讨论】:

    • 谢谢兄弟,不知道文档有变化
    • 当我们导航到没有底部导航的不同屏幕时出现另一个问题,然后它不会保存状态
    • 使用navController.popBackStack() 而不是navController.navigate(/*Some Route*/)
    • 从字面上看,问题在于collectAsLazyPagingItems() 。遗憾的是无法修复它
    • @nabeel 在使用 collectAsLazyPagingItems() 时保存状态是否成功?
    猜你喜欢
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 2021-12-12
    • 2022-01-20
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-12-02
    相关资源
    最近更新 更多