问题描述
在做毕业设计app中遇到这样一个问题,使用RecyclerView进行下拉加载数据的时候,比如我每次让它加载5条数据,当服务器端数据总数刚好是5的倍数的时候,不会出现下拉加载数据集合越界的问题,但当服务器数据不能被5整除的时候就会出现集合越界问题。
问题代码
@Override public void onLoad() { //下拉加载更多的逻辑 mHandler.postDelayed(new Runnable() { @Override public void run() { //创建一个临时集合 ArrayListtempLoadTaskInfoLists = 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() { //创建一个临时集合 ArrayListtempLoadTaskInfoLists = 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); }
总结:
我们只需要把下拉加载的数据个数做成动态的,而不是写成固定的数据。加以判断就可以避免出现集合越界的错误了