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

总结:

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



posted @ 2017-03-23 09:00  趣学程序  阅读(167)  评论(0编辑  收藏  举报