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

    总结:

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



  • 相关阅读:
    暂停公告
    【laravel】Laravel 5 TokenMismatchException on PHP 5.6.9
    【laravel】laravel class 里面定义以head开头的方法会报错
    【kindle】【转发】kindle链接WIFI自动断开问题
    【js】window.onscroll 无效问题
    【js】【转发】jreturn;、return true、return false;区别
    【js】【vue】获取当前dom层
    【js】input 焦点到内容的最后
    【jquery】 选中复选框 和 return false 的影响
    【jquery】 form ajaxSubmit 问题
  • 原文地址:https://www.cnblogs.com/shaofeer/p/11154446.html
Copyright © 2011-2022 走看看