android使用PullToRefresh实现下拉刷新和上拉加载

发布时间 - 2026-01-10 22:03:00    点击率:

PullToRefresh是一套实现非常好的下拉刷新库,它支持:

1.ListView

2.ExpandableListView

3.GridView

4.WebView

等多种常用的需要刷新的View类型,而且使用起来也十分方便。

demo实例下载

下载完成,将它导入到eclipse中,作为一个library导入到你的工程中就好了。

一、废话少说,下拉刷新Go。

 1.在你的布局文件中加上你想用的View就好了,比如这儿我想用一个支持下拉 刷新的ExpandableListView

<com.handmark.pulltorefresh.library.PullToRefreshExpandableListView 
  android:id="@+id/expand_list" 
  android:layout_width="match_parent" 
  android:layout_height="match_parent" /> 

2. 在你的Activity代码中进行简单的设置:

mExpandList = (PullToRefreshExpandableListView) rootView.findViewById(R.id.expand_list); 
mExpandList.getRefreshableView().setGroupIndicator(null); 
mExpandList.getRefreshableView().setDivider(null); 
mExpandList.getRefreshableView().setSelector(android.R.color.transparent); 
mExpandList.getRefreshableView().setOnGroupClickListener(this); 
mExpandList.setOnRefreshListener(this); 

第一行是找到这个View,最后一行是为它加上刷新的监听器,中间的几行是我对ExpandableListView进行一些设置。

这样其实就已经可以下拉刷新了,但刷新时需要运行的代码写在哪呢,还有为什么下拉不会收起来呢,且往下看。

3.下拉刷新时执行的方法onRefresh()

@Override 
public void onRefresh(PullToRefreshBase<ExpandableListView> refreshView) { 
  if (!isRefreshing) { 
    isRefreshing = true; 
    updateList(true); 
  } else { 
    mExpandList.onRefreshComplete(); 
  } 
} 

一般来说我们会开另一个线程去获取数据,所以这儿会加上一个判断,如果已经在获取数据了,就onRefreshComplete(),就是将下拉收起;否则就去开新线程取数据,取完记得也要onRefreshComplete()哦!

二、上拉加载

如果你不想再费时间去自己写一个上拉加载,不妨试一下PullToRefresh自带的上拉效果哦!

PullToRefresh本身支持下拉刷新和上拉刷新,所以我们只需要将上拉刷新改成上拉加载就行了。

1.设置Mode

// set mode to BOTH 
mExpandList.setMode(Mode.BOTH); 
mExpandList.getLoadingLayoutProxy(false, true).setPullLabel(getString(R.string.pull_to_load)); 
mExpandList.getLoadingLayoutProxy(false, true).setRefreshingLabel(getString(R.string.loading)); 
mExpandList.getLoadingLayoutProxy(false, true).setReleaseLabel(getString(R.string.release_to_load)); 

Mode设置为Mode.BOTH后,下拉和上拉都会执行onRefresh()中的方法了。

因为界面上边,我们要显示“下拉刷新”,下边我们要显示“上拉加载”,所以后三行就是改变下边部分的文字,getLoadingLayoutProxy(false, true)方法大家可以自己感受一下。

2.怎么区分下拉/上拉

网上有的同学是用onScrollListener来判断,这样并不严谨,我依靠是header还是footer处于可见状态来区分下拉和上拉,如果是下拉,那header一定是可见的;反之,footer一定是可见的。

但是PullToRefreshExpandableListView并没有提供这样的接口,那我们就来小改一下我们引入的工程吧,很简单:

找到包“com.handmark.pulltorefresh.library”下的PullToRefreshAdapterViewBase.Java这个类,加入两个新接口:

public boolean isHeaderShown() { 
  return getHeaderLayout().isShown(); 
} 
 
public boolean isFooterShown() { 
  return getFooterLayout().isShown(); 
} 

这样就行了哦,重新编译一下这个工程,和你自己的工程。

在onRefresh()中这样来用:

@Override 
public void onRefresh(PullToRefreshBase<ExpandableListView> refreshView) { 
  if (!isRefreshing) { 
    isRefreshing = true; 
    if (mExpandList.isHeaderShown()) { 
      Utils.LOGD("pull-to-refresh"); 
      refreshOnlineStatus(true); 
    } else if (mExpandList.isFooterShown()) { 
      Utils.LOGD("pull-to-load-more"); 
      loadNextPage(); 
    } 
  } else { 
    mExpandList.onRefreshComplete(); 
  } 
} 

很简单吧,这样我们就YD地使用PullToRefresh实现了下拉刷新和上拉加载,LOL,希望多多少少能帮到大家。

=================================================================

更新于2014-07-01

近来发现:

1.实现上拉监听,只需要实现OnRefreshListener2就可以了,同时别忘记setMode(Mode.BOTH) 哦!

2.PullToRefreshListView在使用上有一个BUG,在你的xml layout中,不能一开始将它的visiablity设置为GONE,否则,在代码中设置visiablity为VISIABLE也没有作用。

最后放上一张效果图

demo:下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# pulltorefresh  # 刷新  # pullrefresh  # 加载更多  # 下拉刷新上拉加载  # android使用PullToRefresh框架实现ListView下拉刷新上拉加载更多  # android使用Ultra-PullToRefresh实现下拉刷新自定义代码  # Android使用PullToRefresh完成ListView下拉刷新和左滑删除功能  # Android开源项目PullToRefresh下拉刷新功能详解2  # Android开源项目PullToRefresh下拉刷新功能详解  # Android下拉刷新控件PullToRefresh实例解析  # Android使用PullToRefresh实现上拉加载和下拉刷新效果的代码  # Android实现简单的下拉刷新pulltorefresh  # Android程序开发之使用PullToRefresh实现下拉刷新和上拉加载  # Android PullToRefreshLayout下拉刷新控件的终结者  # Android带刷新时间显示的PullToRefresh上下拉刷新  # 加载  # 很简单  # 设置为  # 想用  # 自己的  # 导入到  # 就行了  # 好了  # 也要  # 我对  # 只需  # 和你  # 上有  # 作为一个  # 就去  # 非常好  # 只需要  # 要将  # 将它  # 就来 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 香港服务器部署网站为何提示未备案?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  中山网站制作网页,中山新生登记系统登记流程?  如何在Tomcat中配置并部署网站项目?  Linux安全能力提升路径_长期防护思维说明【指导】  中山网站推广排名,中山信息港登录入口?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】  如何注册花生壳免费域名并搭建个人网站?  Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控  微信小程序 input输入框控件详解及实例(多种示例)  音乐网站服务器如何优化API响应速度?  详解MySQL数据库的安装与密码配置  郑州企业网站制作公司,郑州招聘网站有哪些?  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  Linux系统命令中tree命令详解  ,网页ppt怎么弄成自己的ppt?  高防服务器租用如何选择配置与防御等级?  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  如何快速登录WAP自助建站平台?  无锡营销型网站制作公司,无锡网选车牌流程?  如何在阿里云域名上完成建站全流程?  如何制作一个表白网站视频,关于勇敢表白的小标题?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  Laravel如何处理CORS跨域问题_Laravel项目CORS配置与解决方案  java获取注册ip实例  实例解析angularjs的filter过滤器  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  Laravel如何实现文件上传和存储?(本地与S3配置)  微信小程序 canvas开发实例及注意事项  高端智能建站公司优选:品牌定制与SEO优化一站式服务  html5的keygen标签为什么废弃_替代方案说明【解答】  Android实现代码画虚线边框背景效果  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  Python文件流缓冲机制_IO性能解析【教程】  再谈Python中的字符串与字符编码(推荐)  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  简单实现Android验证码  JavaScript如何实现错误处理_try...catch如何捕获异常?  魔方云NAT建站如何实现端口转发?  教学论文网站制作软件有哪些,写论文用什么软件 ?  python中快速进行多个字符替换的方法小结  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Python3.6正式版新特性预览  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试