Android Compose 十一:常用组件列表 compose自己个的 下拉刷新

列表下拉刷新

  • material3 还没有下拉刷新功能
  • material:1.3.0 之后 swiperefresh 被弃用 被PullRefresh替代
  • 使用PullRefresh 需要添加依赖 implementation 'androidx.compose.material:material:1.6.8'
先上代码
复制代码
var refreshing by remember {
        mutableStateOf(false)
    }    

    val list = remember{
        List(10){"条目》》${it}"}.toMutableStateList()
    }

    val scope = rememberCoroutineScope()
    val refreshState = rememberPullRefreshState(refreshing = refreshing, onRefresh = {
        scope.launch {
            refreshing = true
            list.addAll( List(20){
                delay(100)
                "新的条目》》${it}"
            })
            refreshing = false
        }
    })

    Box(modifier = Modifier
        .pullRefresh(refreshState)
        .padding(20.dp)){
        LazyColumn(modifier = Modifier.fillMaxSize()){
            items(list){
                Text(text = "条目>>${it}")
            }
        }

        PullRefreshIndicator(refreshing = refreshing, state = refreshState,modifier=Modifier.align(
            Alignment.TopCenter
        ))
    }
再看效果
  • 默认列表10条
  • 下拉刷新时 协程添加20条 每条延时100ms后刷新结束
接着分析
复制代码
fun Modifier.pullRefresh(
    state: PullRefreshState,     //刷新状态的回调
    enabled: Boolean = true
)

上边是让我们使用rememberPullRefreshState,那么我们就听话看看rememberPullRefreshState

复制代码
@Composable
@ExperimentalMaterialApi
fun rememberPullRefreshState(
    refreshing: Boolean,      //当前是否正在刷新
    onRefresh: () -> Unit,    //刷新时调用此函数
    refreshThreshold: Dp = PullRefreshDefaults.RefreshThreshold,
    refreshingOffset: Dp = PullRefreshDefaults.RefreshingOffset,
): PullRefreshState {
接着我们看看 PullRefreshIndicator
复制代码
fun PullRefreshIndicator(
    refreshing: Boolean,    //A boolean representing whether a refresh is occurring. 
    state: PullRefreshState,  //刷新时的回调函数
    modifier: Modifier = Modifier,
    backgroundColor: Color = MaterialTheme.colors.surface,
    contentColor: Color = contentColorFor(backgroundColor),
    scale: Boolean = false
) {

如果我们注释掉PullRefreshIndicator

结果

  • 没有了刷新的指示器
  • 依然可以刷新列表

说明:

  • PullRefreshIndicator只是用来显示当前是否正在刷新状态的指示器
  • 执行列表刷新的还是Modifer.pullRefresh
于是乎 开玩
复制代码
//        PullRefreshIndicator(refreshing = refreshing, state = refreshState,modifier=Modifier.align(
//            Alignment.TopCenter
//        ))

        AnimatedVisibility(visible = refreshing,modifier = Modifier.align(Alignment.TopCenter)){
            CircularProgressIndicator(
                modifier = Modifier.width(64.dp),
                color = MaterialTheme.colorScheme.secondary,
            )
        }`

结果

相关推荐
明雨-开发11 小时前
Android打包时候Execution failed for task ‘:launcher:lintVitalAnalyzeRelease‘.
android
游戏开发爱好者811 小时前
开心上架是什么,一站式 Apple 开发者工作台总览
android·小程序·https·uni-app·iphone·webview
Android-Flutter12 小时前
android kotlin launch 源码分析
android·kotlin
Android-Flutter12 小时前
android kotlin 状态机 Continuation 详解
android·kotlin
Zha0Zhun13 小时前
Jetpack Compose 实现 iOS 风格 3D WheelPicker
android
深念Y14 小时前
RIO-UL00(EMUI 4.1 / Android 6.0.1 / arm64)开机自启动 sshd
android·linux·华为·安卓·chroot·sshd·emui
爱和冰阔落14 小时前
【MySQL 慢查询排查实战】列表接口逐渐变慢时,怎样从请求链路定位原因
android·数据库·mysql
hunterandroid1 天前
Android WebView JSBridge 治理实战:从线上白屏崩溃到协议化通信
android·前端
一个用户名i1 天前
【Compose 系列】第 1 篇:认识 Compose,为什么要学它
android·android jetpack