Как предотвратить сброс позиции LazyColumn в Jetpack compose при навигации между нижними вкладками навигации?

#android #android-jetpack-compose #android-jetpack-navigation

Вопрос:

 @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)
        }
    }
}
 

Всякий раз, когда вы переходите на другой экран с нижней навигационной панели, столбец «ленивый» сбрасывает положение прокрутки вверх

Следуйте этому руководству, чтобы настроить нижнюю навигационную панель

Ответ №1:

Всякий BottomNavigationItem раз, когда вы выбираете свою композицию, она заменяется другой композицией, а при выборе «Назад» она снова инициализируется. Для восстановления предыдущего композиционного использования saveState = true и restoreState = 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
      }
  }
)
 

Комментарии:

1. Спасибо, брат, не знал, что документация меняется

2. Была еще одна проблема, когда мы переходим на другой экран без нижней навигации, после чего он не сохраняет состояния

3. используйте navController.popBackStack() вместо navController.navigate(/*Some Route*/)

4. буквально проблема в collectAsLazyPagingItems() том, что . К сожалению, я не смог это исправить