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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013055213/article/details/72678035

最近看项目之前的功能,发现了几个问题: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);
            }

猜你喜欢

转载自blog.csdn.net/u013055213/article/details/72678035
今日推荐