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

    总结:

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



  • 相关阅读:
    常见排序算法-----堆排序
    深度优先搜索和广度优先搜索
    剑指offer整理-------二维数组查找
    常见排序算法-----希尔排序
    log4j日志不能输出到文件
    常见排序算法-----直接插入排序
    从零开始学习springBoot(使用thymeleaf和freemarker模板)
    从零开始学习springBoot(Spring Boot使用Druid和监控配置)
    从零开始学习springBoot(定时任务)
    从零开始学习springBoot(默认静态资源和自定义资源映射)
  • 原文地址:https://www.cnblogs.com/shaofeer/p/11154446.html
Copyright © 2011-2022 走看看