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

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

1、ListView优化方式

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

2、效果

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) {
 //这里不处理,在上面状态改变结束之后再处理
 }
 }

4、下拉加刷新原理及实现

下拉刷新核心原理和上拉加载核心原理一致,只是有细节不同。我们需要处理以下问题:如何判断用户当前位置在数据第一条?如何判断用户在第一条的同时下拉一定距离?如何刷新更新界面(上面已经解决)?

1)、注意事项:

初始化应该设置默认上面的刷新图标隐藏,在ProgressBar中设置Android:visibility="gone";这样设置还不行,还需要设置 mListView.setSelection(1);让当前第一列是第一条数据。同样的,在加载完成之后也要设置mListView.setSelection(1);,显示第一行。

2)、实现

*判断第一条的方式mListView.getFirstVisiblePosition()==0
*mListView实现 mListView.setOnTouchListener方法,来根据用户手指按下的位置以及抬起的位置,计算这两者的距离与我们规定的距离(如100)的大小,如大于就进行刷新操作。
*刷新之后通知界面mStringArrayAdapter.notifyDataSetChanged();

 mListView.setOnTouchListener(new View.OnTouchListener() {
 @Override
 public boolean onTouch(View v, MotionEvent event) {

 switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:
  startY=event.getY();
  break;
  case MotionEvent.ACTION_MOVE:
  break;
  case MotionEvent.ACTION_UP:
  endY=event.getY();
  if(endY-startY> DISTANT&&(mListView.getFirstVisiblePosition()==1||mListView.getFirstVisiblePosition()==0)){
  if(!mHandler.hasMessages(FRESH)){
  mProgressBar_top.setVisibility(View.VISIBLE);
  //notif
  mHandler.sendEmptyMessageDelayed(FRESH,5000);
  }

  }
  break;
 }
 //不能返回true,不然直接消费掉了
 return false;
 }
 });

以上就是本文的全部内容,希望对大家学习Android软件编程有所帮助。

(0)

相关推荐

  • Android开发ListView中下拉刷新上拉加载及带列的横向滚动实现方法

    ListView 控件可使用四种不同视图显示项目.通过此控件,可将项目组成带有或不带有列标头的列,并显示伴随的图标和文本. 可使用 ListView 控件将称作 ListItem 对象的列表条目组织成下列四种不同的视图之一:1.大(标准)图标2.小图标3.列表4.报表 View 属性决定在列表中控件使用何种视图显示项目. 还可用 LabelWrap 属性控制列表中与项目关联的标签是否可换行显示.另外,还可管理列表中项目的排序方法和选定项目的外观. 相信有很人做的项目估计都用的到这个.就是List

  • ListView实现下拉刷新加载更多的实例代码(直接拿来用)

    ListView Api bixu 好好看看 mNewsAdapter.notifyDataSetChanged();//刷新ListView 自定义的RefreashListView package com.itguang.dell_pc.myapplication.view; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import and

  • Android仿XListView支持下拉刷新和上划加载更多的自定义RecyclerView

    首先给大家展示下效果图,感觉还不错,请继续往下阅读: 下拉刷新:        上划加载        在项目更新的过程中,遇到了一个将XListView换成recyclerView的需求,而且更换完之后大体效果不能变,但是对于下拉刷新这样的效果,谷歌给出的解决方案是把RecyclerView放在一个SwipeRefreshLayout中,但是这样其实是拉下一个小圆形控件实现的,和XListView的header效果不同.在网上找了很多的别人代码,都没有实现我想要的效果,于是自己动手写了一个.

  • Android ListView实现下拉加载功能

    本文实例为大家分享了ListView下拉加载展示的具体代码,供大家参考,具体内容如下 1.MyListView.Java public class MyListView extends ListView implements OnScrollListener { private final static int RELEASE_To_REFRESH = 0;// 下拉过程的状态值 private final static int PULL_To_REFRESH = 1; // 从下拉返回到不刷新

  • Android ListView下拉刷新上拉自动加载更多DEMO示例

    代码下载地址已经更新.因为代码很久没更新,已经很落伍了,建议大家使用RecyclerView实现. 参考项目: https://github.com/bingoogolapple/BGARefreshLayout-Android https://github.com/baoyongzhang/android-PullRefreshLayout 下拉刷新,Android中非常普遍的功能.为了方便便重写的ListView来实现下拉刷新,同时添加了上拉自动加载更多的功能.设计最初是参考开源中国的And

  • Android自定义listview布局实现上拉加载下拉刷新功能

    listview实现上拉加载以及下拉刷新的方式有很多.下面是我写的一种自定义的布局,复用性也比较的强.首先就是继承的listview的自定义view.   AutoListView.Java: package com.example.mic.testdemo.view; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.os.Bu

  • Android程序开发之Listview下拉刷新上拉(滑动分页)加载更多

    最近做的类似于微博的项目中,有个Android功能要使用到listview的向下拉刷新来刷新最新消息,向上拉刷新(滑动分页)来加载更多. 新浪微博就是使用这种方式的典型. 当用户从网络上读取微博的时候,如果一下子全部加载用户未读的微博这将耗费比较长的时间,造成不好的用户体验,同时一屏的内容也不足以显示如此多的内容.这时候,我们就需要用到另一个功能,那就是listview的分页了,其实这个分页可以做成客户端的分页,也可以做成服务器端的分页(点击加载时,从服务器对应的加载第N页就好了!!!).通过分

  • Android ListView实现上拉加载下拉刷新和滑动删除功能

    最近项目需要用到可以滑动删除并且带有上拉加载下拉刷新的Listview,查阅了一些资料,大多都是在SwipeMenuListView的基础上去添加头部和底部View,来扩展上拉加载和下拉刷新的功能,不过需要手动的去绘制UI及处理一些动画效果.用起来也不是特别方便.刚好项目中用到PulltorefreshLibrary库,就尝试着扩展了一个PullToRefreshSwipeMenuListView类来实现需求.先看一下效果: 实现步骤 一.组合Pulltorefresh与SwipeMenuLis

  • Android实现上拉加载更多以及下拉刷新功能(ListView)

    首先为大家介绍Andorid5.0原生下拉刷新简单实现. 先上效果图: 相对于上一个19.1.0版本中的横条效果好看了很多.使用起来也很简单. <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" and

  • Android XListView下拉刷新和上拉加载更多

    市面上有好多的类比ListView刷新数据的开源框架,如:v4包自带的SwipeRefreshLayout ,以及集ListView.GridView甚至WebView于一身的Pulltorefresh等等.前述的两个开源框架目前使用也算频繁.有兴趣的读者可以自行搜索,当然有时间一定回来对所有的使用方式做一个汇总和比较.今天介绍的这款框架,专门针对ListView做下拉刷新与上拉加载的,如果单单是ListView就显得更加简单方便易于理解. 1.首先引入xListView_lib库到自己的Dem

随机推荐