PullToRefresh使用详解
2015-11-20 16:15
423 查看
PullToRefresh是一套实现非常好的下拉刷新库,它支持:
1.ListView
2.ExpandableListView
3.GridView
4.WebView
等多种常用的需要刷新的View类型,而且使用起来也十分方便。
一、下拉刷新:
1.在你的布局文件中加上你想用的View就好了,比如这儿我想用一个支持下拉刷新的PullToRefreshListView
2. 在你的Activity代码中进行简单的设置
第一行是找到这个View,最后一行是为它加上刷新的监听器,中间的几行是我对PullToRefreshListView进行一些设置:
二、上拉加载
Mode设置为Mode.BOTH后,下拉和上拉都会执行onRefresh()中的方法了。
因为界面上边,我们要显示“下拉刷新”,下边我们要显示“上拉加载”,
所以后三行就是改变下边部分的文字,getLoadingLayoutProxy(false, true)方法大家可以自己试试。
2.怎么区分下拉/上拉
这里依靠header和footer处于可见状态来区分下拉和上拉,如果是下拉,那header一定是可见的;反之,footer一定是可见的。
但是PullToRefreshExpandableListView并没有提供这样的接口,那我们就来小改一下我们引入的工程吧,很简单:
找到包“com.handmark.pulltorefresh.library”下的PullToRefreshAdapterViewBase.java这个类,加入两个新接口:
使用PullToReFreshListView后你会发现没有点击监听事件,如何实现它的点击监听事件呢?
1.ListView
2.ExpandableListView
3.GridView
4.WebView
等多种常用的需要刷新的View类型,而且使用起来也十分方便。
一、下拉刷新:
1.在你的布局文件中加上你想用的View就好了,比如这儿我想用一个支持下拉刷新的PullToRefreshListView
<com.handmark.pulltorefresh.library.PullToRefreshListView android:id="@+id/mPullToRefreshListView" android:layout_width="fill_parent" android:layout_height="fill_parent" android:descendantFocusability="blocksDescendants" android:divider="@null" />
2. 在你的Activity代码中进行简单的设置
第一行是找到这个View,最后一行是为它加上刷新的监听器,中间的几行是我对PullToRefreshListView进行一些设置:
mList = (PullToRefreshListView) rootView.findViewById(R.id.expand_list); mList.getRefreshableView().setGroupIndicator(null); mList.getRefreshableView().setDivider(null); mList.getRefreshableView().setSelector(android.R.color.transparent); mList.getRefreshableView().setOnGroupClickListener(this); mList.setOnRefreshListener(this);这样就可以下拉刷新了,刷新时需要运行的代码写在哪呢,还有完成刷新时要收起刷新Header,请看下面:
mList.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() { @Override public void onRefresh(PullToRefreshBase<ListView> refreshView) { if (!isRefreshing) { isRefreshing = true; updateList(true); } else { mList.onRefreshComplete(); } });一般来说我们会开另一个线程去获取数据,所以这儿加上一个判断,如果已经在获取数据了,就onRefreshComplete(),就是将下拉收起;否则就去开新线程取数据,取完记得也要onRefreshComplete();
二、上拉加载
//Mode.PULL_FROM_START 下拉刷新 //Mode.PULL_FROM_END 上拉加载 mList.setMode(Mode.BOTH); //下拉刷新和上拉加载都应用, mList.getLoadingLayoutProxy(false, true).setPullLabel("上拉加载"); mList.getLoadingLayoutProxy(false, true).setRefreshingLabel(getString(R.string.loading)); mList.getLoadingLayoutProxy(false, true).setReleaseLabel(getString(R.string.release_to_load));
Mode设置为Mode.BOTH后,下拉和上拉都会执行onRefresh()中的方法了。
因为界面上边,我们要显示“下拉刷新”,下边我们要显示“上拉加载”,
所以后三行就是改变下边部分的文字,getLoadingLayoutProxy(false, true)方法大家可以自己试试。
2.怎么区分下拉/上拉
这里依靠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 (mList.isHeaderShown()) { Log.i("pull-to-refresh","pull-to-refresh"); refreshOnlineStatus(true); } else if (mList.isFooterShown()) { Log.i("push-to-refresh","push-to-refresh"); loadNextPage(); } } else { mList.onRefreshComplete(); } }注意:PullToRefreshListView在使用上有一个BUG,在你的xml layout中,不能一开始将它的visiablity设置为GONE,否则,在代码中设置visiablity为VISIABLE也没有作用。
使用PullToReFreshListView后你会发现没有点击监听事件,如何实现它的点击监听事件呢?
mList.getRefreshableView().setOnItemClickListener()就可以实现点击事件
相关文章推荐
- 剑指offer:复杂链表的复制
- Python 实现双向链表(图解)
- Linux NFS服务器的安装与配置
- ajax事件监听函数
- activity的启动模式
- 数据库事务
- 学习Berkeley DB- 入门
- BNU 13259.Story of Tomisu Ghost 分解质因子
- 当迷茫在大学泛滥成灾
- css中width与继承的关系
- 因为滚动条,当出现弹出框时,页面会左右晃动一下的解决方案
- Android错误——android.content.res.Resources$NotFoundException:
- LeetCode:Excel Sheet Column Title
- Unix学习笔记-------Unix编程实例练习
- 二进制,八进制,十进制,十六进制转换算法
- 数据结构 — 图之邻接表存储创建和深度优先遍历
- <7> go time定时器
- [收藏]101个鲜为人知的超实用网站
- UIToolBar
- 类数组