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

    总结:

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



  • 相关阅读:
    Codewars Solution:Two to One
    Codewars Solution:Get the Middle Character
    golang jwt+token验证
    C#基础知识点梳理二
    C#基础知识点梳理一
    逻辑值
    step-1
    视频第5讲-ID转换
    通过向量访问矩阵
    跟着jmzeng学习GEO数据分析-GEO42872_1--题外
  • 原文地址:https://www.cnblogs.com/shaofeer/p/11154446.html
Copyright © 2011-2022 走看看