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);
}
总结:
我们只需要把下拉加载的数据个数做成动态的,而不是写成固定的数据。加以判断就可以避免出现集合越界的错误了