java——分页(先加载全部数据,然后把数据分页进行加载)、异步任务AsyncTask

1、先加载全部数据,然后把数据按照20条一页进行加载(不需要UI主动去调分页)

java 复制代码
class PageLoad extends Thread {
        int page = 0;
        List<MultiItemEntity> cBillPickSelectUIS;

        public PageLoad(List<MultiItemEntity> entitys) {
            Log.e("TAG","分页加载===");
            cBillPickSelectUIS = entitys;
        }

        public void run() {
            if (cBillPickSelectUIS == null) return;
            if (cBillPickSelectUIS.size() < 20) {
                requireActivity().runOnUiThread(() -> { // 这里使用handle去更新就不需要用到requireActivity()
                    mSelAdapter.setNewData(cBillPickSelectUIS);
                });

            } else {
                HashMap<Integer, List<MultiItemEntity>> hashMap = splitArray(cBillPickSelectUIS, 20);
                hashMap.get(page);
                hashMap.forEach((integer, multiItemEntities) -> {

//                    if (integer>4) return; //只展示前4条
                    try {
                        Thread.sleep(1000);
                        requireActivity().runOnUiThread(() -> {// 这里使用handle去更新就不需要用到requireActivity()
                            mSelAdapter.addData(multiItemEntities);
                            mSelAdapter.notifyDataSetChanged();
                        });
                    } catch (InterruptedException e) {
                        throw new RuntimeException(e);
                    }
                });
            }
        }
        public HashMap<Integer, List<MultiItemEntity>> splitArray(List<MultiItemEntity> originalArray, int chunkSize) {
            if (originalArray == null || originalArray.size() == 0 || chunkSize <= 0) {
                return new HashMap();
            }
            //这里如何把originalArray数组拆分成多个数组?每个数组50长度,然后返回HashMap
            HashMap<Integer, List<MultiItemEntity>> resultMap = new HashMap<>();
            int index = 0;
            for (int i = 0; i < originalArray.size(); i += chunkSize) {
                List<MultiItemEntity> subList = new ArrayList<>(originalArray.subList(i, Math.min(i + chunkSize, originalArray.size())));
                resultMap.put(index++, subList);
            }
            return resultMap;
        }
    }

调用:

java 复制代码
new PageLoad(cBillPickSelectUIS).start();

2、异步任务AsyncTask

java 复制代码
private class LoadDataTask extends AsyncTask<Void, Void, List<MultiItemEntity>> {
        private int selflag;
        private int patienttypeflag;
        private String sDate;
        private String eDate;
        private List<CPickBillSelectDept> dlist;
        private int pickOrCancel;

        public LoadDataTask(int selflag, int patienttypeflag, String sDate, String eDate, List<CPickBillSelectDept> dlist, int pickOrCancel) {
            this.selflag = selflag;
            this.patienttypeflag = patienttypeflag;
            this.sDate = sDate;
            this.eDate = eDate;
            this.dlist = dlist;
            this.pickOrCancel = pickOrCancel;
        }

        @Override
        protected List<MultiItemEntity> doInBackground(Void... voids) {
            return billPickRepository.getPickBillSelList(selflag, patienttypeflag, sDate, eDate, dlist, pickOrCancel);// 耗时任务
        }

        @Override
        protected void onPostExecute(List<MultiItemEntity> result) {
            // 在这里处理后台任务返回的结果,例如更新UI
            billpicksellist.postValue(result);
        }
    }
相关推荐
一个做软件开发的牛马2 分钟前
Java 继承与多态:从"是什么"到"能做什么"的设计思维
java·后端
不懂的浪漫12 分钟前
05|Netty ByteBuf 源码分析:为什么不用 Java ByteBuffer
java·netty
阿里嘎多学长16 分钟前
2026-05-30 GitHub 热点项目精选
开发语言·程序员·github·代码托管
wapicn9918 分钟前
API接口调试笔记:从注册到第一个数据返回,全流程详解
java·开发语言·python·lua
程序员阿明21 分钟前
flowable集成flowable及其运行示例spring boot后端
java·spring boot·后端
.千余23 分钟前
【Linux】 TCP进阶详解:字节流、粘包问题、异常情况与UDP完整对比2
linux·运维·c语言·开发语言·经验分享·笔记·php
PascalMing24 分钟前
从零实现一款 Windows 下的 SSH 批量运维工具:LinuxSshTools 技术详解
运维·windows·ssh
geovindu24 分钟前
python: Bounded Parallelism Pattern
开发语言·python·设计模式·有界并行模式
大明者省27 分钟前
Ubuntu Python 部署终极版教程
开发语言·python·ubuntu
代码不停28 分钟前
Spring IoC&DI
java·后端·spring