Jetpack Compose - 恢复 LazyColumn 滚动状态

时间:2021-07-21 10:25:28

标签: android kotlin android-jetpack-compose android-jetpack-compose-list lazycolumn

我有一个包含多个 LazyColumnLazyRow。用旧的术语来说,嵌套的 RecyclerView。

我的问题是,LazyColumn 在移动到新的组合(不同的标签)时不会恢复滚动状态。但内部 LazyRow 会恢复它们的状态。

例如,打开主屏幕,滚动到底部,然后滚动 LazyRow 以结束,然后打开另一个标签并再次返回到主页标签。 LazyColumn 从顶部开始(不恢复状态)但最后一个 LazyRow 恢复它的滚动状态。

包含 LazyColumn

的主屏幕
@Composable
fun HomeScreen(
    homeViewModel: HomeViewModel = hiltViewModel()
) {

    val scrollState = rememberLazyListState()

    LazyColumn(contentPadding = PaddingValues(vertical = 8.dp),
        horizontalAlignment = Alignment.Start,
        verticalArrangement = Arrangement.spacedBy(8.dp),
        state = scrollState,
        modifier = Modifier
            .fillMaxSize()
            .background(MaterialTheme.colors.background)
    ) {
        items(5) {
            TopRatedProducts(homeViewModel = homeViewModel)
        }
    }
}

包含 LazyRow 的 TopRatedProducts

@Composable
fun TopRatedProducts(
    homeViewModel: HomeViewModel = hiltViewModel()
) {
    val topRatedProducts by rememberFlowWithLifecycle(homeViewModel.topRatedProducts)
        .collectAsState(initial = emptyList())

    LazyRow(
        contentPadding = PaddingValues(horizontal = 8.dp), // Space between start and end
        verticalAlignment = Alignment.CenterVertically,
        horizontalArrangement = Arrangement.spacedBy(8.dp), // Space between items
        modifier = Modifier
            .background(Color.Green)
    ) {
        items(topRatedProducts) {
            ProductCardItem(item = it)
        }
    }
}

如何恢复 LazyColumn 滚动状态?

0 个答案:

没有答案