在 Jetpack Compose 中使用 Paging 3 库进行分页时,可能会遇到需要在任何查询更改时都能够滚动到列表顶部的需求。这可以通过使用 LazyColumn 和 ScrollToTop 拦截器来实现。具体步骤如下:
val pagingSource = ... // 创建分页源
val pagingConfig = PagingConfig(...) // 创建分页配置对象
val lazyPagingItems = rememberPagingItems(pagingSource, pagingConfig)
LazyColumn {
itemsIndexed(
items = lazyPagingItems,
// 设置拦截器,记录是否需要滚动到顶部
key = { _, item -> item.id },
itemContent = { _, item ->
ListItem(item = item)
},
// 拦截器,在查询更改时滚动到顶部
scrollUpTo = { 0 }
)
}
val onLoadStateRefresh = {
withContext(Dispatchers.IO) {
// 重新加载数据
lazyPagingItems.invalidate()
// 判断是否需要滚动到顶部
if (lazyPagingItems.itemCount > 0) {
val firstVisibleItemIndex = lazyPagingItems.firstVisibleItemIndex
if (firstVisibleItemIndex != null && firstVisibleItemIndex > 0) {
ScrollToTop
}
}
}
}
// 绑定数据源和刷新方法
LaunchedEffect(Unit) {
lazyPagingItems.loadStateFlow.collectLatest { loadStates ->
// 处理加载状态和错误
}
lazyPagingItems.onRefresh(onLoadStateRefresh)
}
这样,在任何分页查询更新时,就会自动滚动到