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);
        }
    }
相关推荐
tokepson8 小时前
Mysql下载部署方法备份(Windows/Linux)
linux·服务器·windows·mysql
molaifeng9 小时前
Go 语言如何实现高性能网络 I/O:Netpoller 模型揭秘
开发语言·网络·golang
韩师学子--小倪9 小时前
fastjson与gson的toString差异
java·json
Drawing stars9 小时前
JAVA后端 前端 大模型应用 学习路线
java·前端·学习
崇山峻岭之间9 小时前
Matlab学习记录33
开发语言·学习·matlab
Evand J9 小时前
【2026课题推荐】DOA定位——MUSIC算法进行多传感器协同目标定位。附MATLAB例程运行结果
开发语言·算法·matlab
nbsaas-boot9 小时前
SQL Server 存储过程开发规范(公司内部模板)
java·服务器·数据库
行百里er10 小时前
用 ThreadLocal + Deque 打造一个“线程专属的调用栈” —— Spring Insight 的上下文管理术
java·后端·架构
jllllyuz10 小时前
基于MATLAB的二维波场模拟程序(含PML边界条件)
开发语言·matlab
忆锦紫10 小时前
图像增强算法:Gamma映射算法及MATLAB实现
开发语言·算法·matlab