• 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))
                    }
                }
            }
        }
    
    

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

  • 相关阅读:
    Sping源码(九)—— Bean的初始化(非懒加载)— Bean的创建方式(factoryMethod)
    python异常处理
    HJ26 字符串排序
    JVM内存布局
    vue/react/js 常用的原生获取当前页面的url网址的相关方法
    One UI 5 升级来了
    java基于微信小程序的停车场自动收费管理系统 uniapp 小程序
    Python 基于docker部署的Mysql备份查询脚本
    基于ssm疫情居家办公OA系统获取(java毕业设计)
    服务器的维护是如何操作
  • 原文地址:https://blog.csdn.net/weixin_41648633/article/details/139678105