前言
Jetpack Compose光下拉刷新,官方就提供了三种不同的方式,使用的依赖也不相同,特别的混乱。
所以在网络上看到的示例可能找不到依赖就是这个原因。
其中
swiperefresh 被废弃了
PullToRefreshBox还处于实验阶段
也就是说只有前两种可以使用,如果不嫌弃代码中有废弃红线的标记,可以使用第一种,要么使用第二种。
Compose Material 3
最新版本是1.3.2,本文使用的是1.3.0。
下拉刷新
swiperefresh
这个已经废弃,不过依旧能用。
导入
1 | implementation("com.google.accompanist:accompanist-swiperefresh:0.30.1") |
使用
1 | import android.util.Log |
PullToRefreshBox
这个还是实验API
1 | import android.util.Log |
自定义样式
自定义加载中样式
1 | val state = rememberPullToRefreshState() |
加载更多
1 |
|
下拉刷新+加载更多
封装组件同时支持下拉刷新和上拉加载更多
工具类
1 | import androidx.compose.foundation.layout.Arrangement |
调用
1 | ZRefreshLoadMoreColumn( |
VM代码
定义下面的属性和方法
1 | val dataLoading = mutableStateOf(false) |
一定别忘了这两处的调用
加载完停止加载中动画
1 | dataLoading.value = false |
判断是否有更多数据
1 | if (it.isEmpty()) { |
聊天界面刷新/加载
聊天页面特殊在于
- 加载更多是在下拉到顶部的时候触发。
- 刷新的时候要滚动到底部。
工具类
1 | import androidx.compose.foundation.layout.Arrangement |
Compose
1 | ZRefreshLoadMoreTalkColumn( |
VM代码
1 | val dataLoading = mutableStateOf(false) |
注意添加数据要向前添加
1 | cpList.addAll(0, it) |