zoukankan      html  css  js  c++  java
  • RecyclerView下拉加载集合越界问题

    问题描述

    在做毕业设计app中遇到这样一个问题,使用RecyclerView进行下拉加载数据的时候,比如我每次让它加载5条数据,当服务器端数据总数刚好是5的倍数的时候,不会出现下拉加载数据集合越界的问题,但当服务器数据不能被5整除的时候就会出现集合越界问题。

    问题代码

     @Override
        public void onLoad() {
            //下拉加载更多的逻辑
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    //创建一个临时集合
                    ArrayList<TaskInfo> tempLoadTaskInfoLists = new ArrayList<>();
                    if (mCurrentShowTaskInfoLists.size() < mTaskInfoLists.size()) {
                        //说明有数据
                        mListsTaskAdapter.CURRENT_STATE = ListsTaskAdapter.REFRESH_DATA_STATE;
                        //临时集合里面就是现在已经显示了多少条数据
                        for (int i = mCurrentShowTaskInfoLists.size(); i < mCurrentShowTaskInfoLists.size() + t; i++) {
                            tempLoadTaskInfoLists.add(mTaskInfoLists.get(i));
                        }
                    } else {
                        mListsTaskAdapter.CURRENT_STATE = ListsTaskAdapter.NOT_DATA_STATE;
                    }
                    mCurrentShowTaskInfoLists.addAll(tempLoadTaskInfoLists);
                    //添加数据
                    mListsTaskAdapter.addData(tempLoadTaskInfoLists);
                }
            }, 2000);

    解决问题代码

     @Override
        public void onLoad() {
            //下拉加载更多的逻辑
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    //创建一个临时集合
                    ArrayList<TaskInfo> tempLoadTaskInfoLists = new ArrayList<>();
                    if (mCurrentShowTaskInfoLists.size() < mTaskInfoLists.size()) {
    
                        int t = 0;
    
                        //判断剩余的数据有没有5的倍数
                        if ((mTaskInfoLists.size() - mCurrentShowTaskInfoLists.size()) / 5 != 0) {
                            //如果不等于0,说明有5
                            t = 5;
                        } else {
                            //如果等于0,则说明没有5了
                            t = (mTaskInfoLists.size() - mCurrentShowTaskInfoLists.size()) % 5;
                        }
    
                        //说明有数据
                        mListsTaskAdapter.CURRENT_STATE = ListsTaskAdapter.REFRESH_DATA_STATE;
                        //临时集合里面就是现在已经显示了多少条数据
                        for (int i = mCurrentShowTaskInfoLists.size(); i < mCurrentShowTaskInfoLists.size() + t; i++) {
                            tempLoadTaskInfoLists.add(mTaskInfoLists.get(i));
                        }
                    } else {
                        mListsTaskAdapter.CURRENT_STATE = ListsTaskAdapter.NOT_DATA_STATE;
                    }
                    mCurrentShowTaskInfoLists.addAll(tempLoadTaskInfoLists);
                    //添加数据
                    mListsTaskAdapter.addData(tempLoadTaskInfoLists);
                }
            }, 2000);
        }

    总结:

    我们只需要把下拉加载的数据个数做成动态的,而不是写成固定的数据。加以判断就可以避免出现集合越界的错误了



  • 相关阅读:
    使用 VS Code 开发和调试 Burp Suite 扩展
    后渗透神器 Empire 基础用法
    5种语言的按钮事件 断点
    X64下MmIsAddressValid的逆向及内存寻址解析
    x64 内存共享区 KUSER_SHARED_DATA
    内存映射+远线程 调用游戏CALL
    C语言运算符总结
    x32 x64的不同传参方式
    内存占用的一些小问题
    x64分页机制 9
  • 原文地址:https://www.cnblogs.com/shaofeer/p/11154446.html
Copyright © 2011-2022 走看看