返回
Compose中Paging3、SwipeRefresh配合实现下拉刷新和自动加载
Android
2024-01-23 01:39:07
概述
Compose中Paging3的使用和Recycleview中Paging3的使用基本一致,不同的是Compose中我们的ui使用LazyColumn来承载数据。 我们需要做的事情如下:
- 配置PagingData
- 在Compose UI中使用LazyColumn
- 实现下拉刷新和自动加载
Paging3配置
// 创建PagingDataFlow
val pagingDataFlow = pager(
config = PagingConfig(pageSize = PAGE_SIZE),
remoteMediator = NewsRemoteMediator(newsRepository)
) {
newsRepository.getNews()
}
Compose UI使用LazyColumn
LazyColumn(
modifier = Modifier.fillMaxSize(),
state = listState
) {
items(pagingData) { news ->
NewsItem(news = news)
}
}
下拉刷新和自动加载
// 下拉刷新
SwipeRefresh(
modifier = Modifier.fillMaxSize(),
state = refreshState,
onRefresh = { pagingDataFlow.retry() }
) {
LazyColumn(
modifier = Modifier.fillMaxSize(),
state = listState
) {
items(pagingData) { news ->
NewsItem(news = news)
}
}
}
// 自动加载
val loadState = rememberPagerState(pagingData)
LazyColumn(
modifier = Modifier.fillMaxSize(),
state = listState
) {
items(pagingData) { news ->
NewsItem(news = news)
}
item {
val hasMorePages = loadState.append.endOfPaginationReached.not()
if (hasMorePages) {
CircularProgressIndicator()
}
}
}
总结
在Compose中使用Paging3实现数据分页和下拉刷新与在Recycleview中使用Paging3实现数据分页和下拉刷新基本一致。不同的是,在Compose中,我们需要使用LazyColumn来承载数据,并且可以使用SwipeRefresh来实现下拉刷新和自动加载的功能。