返回

Compose中Paging3、SwipeRefresh配合实现下拉刷新和自动加载

Android

概述
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来实现下拉刷新和自动加载的功能。