• Android Compose 十二:常用组件列表 上拉加载


    列表 上拉加载

    当前思路
    判断 列表最后一个显示的条目 为 数据集合的长度-1

    • 用来记录刷新状态
     var refreshing by remember {
            mutableStateOf(false)
        }
    
    • 数据集合
    val list = remember{
            List(10){"条目》》${it}"}.toMutableStateList()
        }
    
    • 用来记录列表当前状态及状态变化
    val lazyListState = rememberLazyListState()
    
       LaunchedEffect(lazyListState){
           snapshotFlow {lazyListState.layoutInfo.visibleItemsInfo.lastOrNull()?.index == list.size - 1}
               .distinctUntilChanged()
               .collect{
                   refreshing = true
                   list.addAll( List(20){
                       delay(100)
                       "新的条目》》${list.size+it}"
                   })
                   refreshing = false
               }
       }
    
    • 组件显示
     Box(modifier = Modifier
            .padding(20.dp)){
            LazyColumn(modifier = Modifier.fillMaxSize(), state = lazyListState){
                items(list){
                    Text(text = "条目>>${it}")
                }
                if(refreshing){
                    item {
                        Text(text = "加载更多...",modifier = Modifier.fillMaxWidth().height(50.dp).align(
                            Alignment.Center))
                    }
                }
            }
        }
    
    

    完整代码

     var refreshing by remember {
            mutableStateOf(false)
        }
    
        val list = remember{
            List(10){"条目》》${it}"}.toMutableStateList()
        }
    
    
        val lazyListState = rememberLazyListState()
    
        LaunchedEffect(lazyListState){
            snapshotFlow {lazyListState.layoutInfo.visibleItemsInfo.lastOrNull()?.index == list.size - 1}
                .distinctUntilChanged()
                .collect{
                    refreshing = true
                    list.addAll( List(20){
                        delay(100)
                        "新的条目》》${list.size+it}"
                    })
                    refreshing = false
                }
        }
    
        Box(modifier = Modifier
            .padding(20.dp)){
            LazyColumn(modifier = Modifier.fillMaxSize(), state = lazyListState){
                items(list){
                    Text(text = "条目>>${it}")
                }
                if(refreshing){
                    item {
                        Text(text = "加载更多...",modifier = Modifier.fillMaxWidth().height(50.dp).align(
                            Alignment.Center))
                    }
                }
            }
        }
    
    

    效果
    请添加图片描述
    注:此法有一弊端就是,初始不够一页不足以显示到整个页面时,会自动加载够页面显示;需另行做判断

  • 相关阅读:
    react&antd问题(2)
    22-06-22 ssm终章 ssm整合、实现分页功能
    ubuntu20.04安装pip
    R语言-如何读写带分隔符的文件
    Vue与React//双绑问题
    二、MAVEN的安装和配置
    docker安装rocketMQ并测试
    云呐|动环监控设备维护与常见故障处理
    51单片机-串口通信
    【Docker】 ubuntu18.04编译时内存不足需要使用临时交换分区解决“c++: internal compiler error“错误
  • 原文地址:https://blog.csdn.net/weixin_41648633/article/details/139678105