【问题标题】:How can I remember the list position in a Compose LazyColumn using Paging 3 LazyPagingItems?如何使用 Paging 3 LazyPagingItems 记住 Compose LazyColumn 中的列表位置?
【发布时间】:2023-02-12 01:38:46
【问题描述】:
我有一个像这样的功能:
@Composable
fun LazyElementList(data: Flow<PagingData<Element>>) {
val scrollState = rememberLazyListState()
val elements = data.collectAsLazyPagingItems()
LazyColumn(state = scrollState) {
items(elements) {
DisplayElement(it)
}
}
}
我想在导航到另一个屏幕并返回时保持在列表中的位置。
没想到,访问子屏幕时,维护了scrollState的值。如果不是,它应该被提升,可能进入 ViewModel。
【问题讨论】:
标签:
android-jetpack-compose
android-paging
android-paging-3
【解决方案1】:
在问题的代码中scrollState 将被重置为列表的开头,因为第一个组合的列表中没有项目。您需要等到元素加载完毕才能显示列表。
@Composable
fun LazyElementList(data: Flow<PagingData<Element>>) {
val scrollState = rememberLazyListState()
val elements = data.collectAsLazyPagingItems()
if (elements.isLoading) {
DisplayLoadingMessage()
} else {
LazyColumn(state = scrollState) {
items(elements) {
DisplayElement(it)
}
}
}
}
fun LazyPagingItems.isLoading(): Boolean
get() = loadState.refresh is LoadState.Loading