Android ListView实现上拉加载更多和下拉刷新功能

2019-12-10 18:01:27王旭
这篇文章主要为大家详细介绍了Android ListView实现上拉加载更多和下拉刷新功能,介绍了ListView刷新原理及实现方法,感兴趣的小伙伴们可以参考一下  

本文实例为大家介绍了Android ListView下拉刷新功能的实现方法和功能,供大家参考,具体内容如下

1、ListView优化方式

界面缓存:ViewHolder+convertView
分页加载:上拉刷新
图片缓存
快速滑动ListView禁止刷新

2、效果

Android,ListView,上拉加载,下拉刷新

3、上拉加载更多原理及实现

当我们手指滑动到listview最后位置的时候,我们触发加载数据的方法。这触发之前我们需要做一些工作,包括:

如何判断滑动到最后?

如何避免重复加载数据?

加载之后如何刷新界面?

1)、界面实现AbsListView.OnScrollListener接口,当firstVisibleItem + visibleItemCount >= totalItemCount即可判断滑动到了最下面;
2)、为了不重复加载数据,例如当我手指滑动到最下面,手指立马离开,然后再马上滑动,就会导致数据拉取两次,我们利用mHandler.hasMessages(LOAD)判断消息队列中是否已经存在这个消息;
3)、我们在handler中加载新数据,并且利用 mStringArrayAdapter.notifyDataSetChanged();通知界面刷新。

 

 int result1;
 int result2;
 //监听状态改变
 @Override
 public void onScrollStateChanged(AbsListView view, int scrollState) {
 switch (scrollState) {
 case SCROLL_STATE_IDLE:
 //滑动结束
 break;
 case SCROLL_STATE_FLING:
 //手指离开屏幕
 if (result1 >= result2) {
  //只发送一次,防止多次加载数据
  if (!mHandler.hasMessages(LOAD))
  mHandler.sendEmptyMessageDelayed(LOAD, 5000);
 }
 break;
 case SCROLL_STATE_TOUCH_SCROLL:
 //滑动中
 break;
 }
 }

 //滑动结束之后执行
 @Override
 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
 // Log.e(TAG, "firstVisibleItem:" + firstVisibleItem + "---visibleItemCount:" + visibleItemCount + "--totalItemCount:" + totalItemCount);
 //加载到最后
 if (firstVisibleItem + visibleItemCount >= totalItemCount) {
 //这里不处理,在上面状态改变结束之后再处理
 }
 }