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);
}
总结:
我们只需要把下拉加载的数据个数做成动态的,而不是写成固定的数据。加以判断就可以避免出现集合越界的错误了
RecyclerView下拉加载集合越界问题的更多相关文章
- Android之 RecyclerView,CardView 详解和相对应的上拉刷新下拉加载
随着 Google 推出了全新的设计语言 Material Design,还迎来了新的 Android 支持库 v7,其中就包含了 Material Design 设计语言中关于 Card 卡片概念的 ...
- RecyclerView 上拉加载下拉刷新
RecyclerView 上拉加载下拉刷新 <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/teach_s ...
- ASP.NET仿新浪微博下拉加载更多数据瀑布流效果
闲来无事,琢磨着写点东西.貌似页面下拉加载数据,瀑布流的效果很火,各个网站都能见到各式各样的展示效果,原理大同小异.于是乎,决定自己写一写这个效果,希望能给比我还菜的菜鸟们一点参考价值. 在开始之前, ...
- PullToRefreshGridView上拉刷新,下拉加载
PullToRefreshGridView上拉刷新,下拉加载 布局: <?xml version="1.0" encoding="utf-8"?> ...
- Flutter学习笔记(25)--ListView实现上拉刷新下拉加载
如需转载,请注明出处:Flutter学习笔记(25)--ListView实现上拉刷新下拉加载 前面我们有写过ListView的使用:Flutter学习笔记(12)--列表组件,当列表的数据非常多时,需 ...
- 关于MJRefresh的下拉加载数据bug
当没有更多数据的时候显示NoMoreData 我的理解是先结束刷新再显示没有更多 今天之前一直没发现有问题 贴之前的代码 [self.collectionView reloadData]; [self ...
- JQuery实现无刷新下拉加载图片
最近做的一个项目需要做页面无刷新下拉加载图片,调研了一番,大多都采用检测滚动条达到底部,然后利用ajax加载下一页数据对页面数据进行添加,根据这一逻辑,自己写了一个,具体代码如下: JQu ...
- 原生JS下拉加载插件分享。
无聊写了一个JS下拉加载插件,有需要的可以下载. // 使用 // new ManDownLoad("#ul","json/load.json",functio ...
- iscroll5 上拉,下拉 加载数据
我这里的思路是上拉时候只是加载第一页的内容,可根据实际情况修改其中的代码.请勿照搬.样式没怎么调,可以加载gif动画.1.没有数据时候,下拉可以加载数据.2.没有数据时候,点击也可以加载数据.3.其余 ...
随机推荐
- How To Compile Qt with Visual Studio
How To Compile Qt with Visual Studio FEBRUARY 1, 2011 This post is a step-by-step guide on how to co ...
- 深入探索ScrollWindow
最近做WIN32 API开发时发现对ScrollWindow的一些工作原理并不是太清楚,于是做了相关研究,记载下来和大家共同学习. 首先在WM_CREATE中获取系统字符的宽度和高度 case WM_ ...
- 我们检测到您的浏览器不兼容传输层安全协议 (TLS) 1.1 或更高版本,此协议在 Internet 上用于确保您通信的安全性。
早上使用.Net WebClient类采集亚马逊数据,返回http 400 Bad Request错误,内容里面有“我们检测到您的浏览器不兼容传输层安全协议 (TLS) 1.1 或更高版本,此协议在 ...
- 虚拟化代码博客 good
推荐网站和博客地址 -------------------------------- 虚拟化代码博客 QEMU大牛博客:qemu - 韋任的維基百科 http://people.cs.nctu ...
- SQL server 2008 防火墙设置
zh以前应为有特殊需求,需要在副武器外连接数据库,需要打开TCPIP服务. 但是因为有防火墙,经常连接不成功. 根据网上的资料总结,写了一个小的bat,来解决这个问题: @echo ========= ...
- 设置windows服务依赖项
场景还原:python2.7开发的项目,制作成了windows服务,随系统启动.系统重启后发现服务未能自动启动,检查事件查看器日志发现服务先于Mysql数据库服务启动,由于服务中必须对MySQL进行访 ...
- python发送邮件554DT:SPM已解决
说明:本例使用163邮箱 一.报错信息 使用SMTP发送邮件遇到以下报错: 554, b'DT:SPM 163 smtp10,DsCowACXeOtmjRRdsY8aCw--.21947S2 1561 ...
- docker系列(五):网络通信
1 引言 之前的几篇docker系列博客说的都是单个容器或者镜像的操作.但容器,作为一种简化的操作系统,又怎能不与机器或者容器相互协同工作呢,这就需要用到容器的网络功能.docker中提供了多种不同的 ...
- [Abp vNext 源码分析] - 4. 工作单元
一.简要说明 统一工作单元是一个比较重要的基础设施组件,它负责管理整个业务流程当中涉及到的数据库事务,一旦某个环节出现异常自动进行回滚处理. 在 ABP vNext 框架当中,工作单元被独立出来作为一 ...
- 前后端分离时代,Java 程序员的变与不变!
事情的起因是这样的,有个星球的小伙伴向邀请松哥在知乎上回答一个问题,原题是: 前后端分离的时代,Java后台程序员的技术建议? 松哥认真看了下这个问题,感觉对于初次接触前后端分离的小伙伴来说,可能都会 ...