listview下拉刷新和加载更多的优化

本文针对项目中分页加载存在的问题进行了改进,避免了每次加载更多时返回顶部的问题,并优化了资源消耗,防止内存溢出。通过使用notifyDataSetChanged()替代重新创建Adapter,实现了真正的分页加载效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近看项目之前的功能,发现了几个问题:1.就是每次加载更多都回到第一条,好奇的我看了一下代码,发现每次都重新new了一个Adapter,而且还是分页加载,我就不懂了,那分页加载还有什么意义呢?为啥不直接用notifyDataSetChanged()这个方法呢,节约资源,防止内存溢出.

再深入的看,所谓的分页加载竟然是每次都是第一页,只是每次请求的条数不同,第一次20条,第二次就40条,虽然这个可以达到分页加载的效果,但是实际上并没有实现.反而浪费用户的流量.

所以我首先把所有的重新定义Adapter的地方删除,改成notifyDataSetChanged(),只给listview设置一次setAdapter.那分页加载就好说了,每次都请求20条,从第一页开始请求,然后请求第二页,判断如果不是第一页也就是加载更多,我就在之前的list基础上使用addAll();方式.这样每次加载更多展示的都是当前浏览的位置,不再是第一条了.


不过后来我又在它之前的基础上考虑了一下,如果每次都重新new一个Adapter呢,如何让listview展示到最后一条呢?
设置listview展示的位置:
ListView.setSelection(int position)
ListView.setSelectionFromTop(int position, int y);
其中
position指的是指定的item的在ListView中的索引,注意如果有Header存在的情况下,索引是从Header就开始算的。
y指的是到ListView可见范围内最上边边缘的距离。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值