listview下拉刷新和加载更多的优化
来源:互联网 发布:淘宝最近怎么了 编辑:程序博客网 时间:2024/05/18 20:08
最近看项目之前的功能,发现了几个问题:1.就是每次加载更多都回到第一条. 2.另一个问题就是下拉刷新,下拉刷新需要把之前的listview中的内容给清除掉,再获取新的集合,使用addAll()没有问题,但是如果我让workInfoList=resultList.getWorkInfoList();就显示不出来.
第一个问题,好奇的我看了一下代码,发现每次都重新new了一个Adapter,而且还是分页加载,我就不懂了,那分页加载还有什么意义呢?为啥不直接用notifyDataSetChanged()这个方法呢,节约资源,防止内存溢出.再深入的看,所谓的分页加载竟然是每次都是第一页,只是每次请求的条数不同,第一次20条,第二次就40条,虽然这个可以达到分页加载的效果,但是实际上并没有实现.反而浪费用户的流量.
所以我首先把所有的重新定义Adapter的地方删除,改成notifyDataSetChanged(),只给listview设置一次setAdapter.那分页加载就好说了,每次都请求20条,从第一页开始请求,然后请求第二页,判断如果不是第一页也就是加载更多,我就在之前的list基础上使用addAll();方式.这样每次加载更多展示的都是当前浏览的位置,不再是第一条了.
不过后来我又在它之前的基础上考虑了一下,如果每次都重新new一个Adapter呢,如何让listview展示到最后一条呢? 通过setSelection(position);的方式可以将listview设置到指定位置,还有一个是setSelectionFromTop(),该方法可以将位置确定的比较精确,但是需要计算出position距离顶部的位置,已办用setSelection()就可以,如果要求不是很严格的话.
/** * Sets the selected item and positions the selection y pixels from the top edge * of the ListView. (If in touch mode, the item will not be selected but it will * still be positioned appropriately.) * * @param position Index (starting at 0) of the data item to be selected. * @param y The distance from the top edge of the ListView (plus padding) that the * item will be positioned. */ public void setSelectionFromTop(int position, int y) { if (mAdapter == null) { return; }
if (pageSize > 20) { //加载更多,跳到之前的位置 int position = resultList.size() - 1; Log.d(TAG, "onLoadMore: position:"+position); pullListView.setSelection(position); } if (pageSize > 20 && resultList.size() < pageSize) { pullListView.setCanLoadMore(false); }
2.另一个问题就是下拉刷新,下拉刷新需要把之前的listview中的内容给清除掉,再获取新的集合,使用addAll()没有问题,但是如果我让workInfoList=resultList.getWorkInfoList();就显示不出来,当时很纳闷.
开始断点,发现workInfoList确实有值,但是为什么不显示呢,再仔细观察,发现如果用=赋值,这样workInfoList的地址就改变了,而Adapter展示的workInfoList还是之前的地址,而这个地址的内容已经清空了,所以没有内容,而使用addAll()是在之前的workInfoList天剑数据,所以地址没有变化,要提醒大家的是,尽量不要用等号给list集合进行复制,这样只是改变了list所指向的地址,之前地址还是没有内容.
阅读全文
0 0
- listview下拉刷新和加载更多的优化
- listview的下拉刷新和上拉加载更多
- listview的上拉加载更多和下拉刷新
- 自定义ListView的下拉刷新和上拉加载更多
- ListView下拉刷新和上拉加载更多的实现
- ListView的下拉刷新,点击加载更多
- ListView 下拉刷新 加载更多
- [Android]下拉刷新和上拉加载更多Listview,仿知乎
- android之ListView上拉加载更多和下拉刷新
- 下拉刷新和加载更多
- 下拉刷新,上拉加载更多的ListView
- Android ListView下拉刷新上拉加载更多的实现
- listView 模仿ios的上拉刷新下拉加载更多
- listview下拉刷新,上拉加载更多的实现方法
- ListView的上拉刷新下拉加载更多
- 安卓下拉刷新上拉加载更多的listview
- Android下拉刷新上拉加载更多的扩展ListView
- 下拉刷新+加载更多的ListView(直接拿来用)
- JAVA中biginteger的相关函数
- 算法导论程序19-期望为线性时间的选择算法(Python)
- web服务器基本原理及Tomcat配置
- POJ2718题解
- Caffe+Windows7+Visual Studio 2015+Python+CPU配置记录
- listview下拉刷新和加载更多的优化
- 如何讲代码push到github
- mongoBooster里使用mongo的foreach方法示例
- DataBinding动态改变数据
- patch,diff相关知识整理
- 离散题目14 判断是否对称
- 如何上传html网页至tomcat服务器
- RabbitMQ消息队列(二)
- LeetCode486. Predict the Winner题解