Android实现上拉加载更多功能以及下拉刷新功能,
采用了目前比较火的PullToRefresh,他是目前实现比较好的下拉刷新的类库。
目前他支持的控件有:ListView, ExpandableListView,GridView,WebView等。
下载地址:https://github.com/chrisbanes/Android-PullToRefresh
首先第一步当然是导入libriay到咱们的项目了,具体导入方式,这里不再赘述。
下面是个例子采用的是ListView,当然其余的和这个类似
1、布局文件activity_main.xml
03 |
android:layout_width="match_parent" |
04 |
android:layout_height="match_parent" |
05 |
tools:context=".MainActivity" > |
07 |
<com.handmark.pulltorefresh.library.PullToRefreshListView |
08 |
android:id="@+id/pull_refresh_list" |
09 |
android:layout_width="fill_parent" |
10 |
android:layout_height="fill_parent" /> |
2、要实现下拉刷新的功能很简单,只需要实现OnRefreshListener的OnRefresh方法即可。这里说一下如何实现上拉和下拉分别执行不同的操作。
这里参考了http://blog.csdn.net/ueryueryuery/article/details/17440465
原理是:根据下拉和上拉显示的布局的可见状态类区分上拉还是下拉,然后执行相应操作。
在PullToRefresh的类库的com.handmark.pulltorefresh.library包下,打开PullToRefreshBase.java,在这个类的最后面添加如下代码:
1 |
public boolean isHeaderShown() { |
2 |
return getHeaderLayout().isShown(); |
5 |
public boolean isFooterShown() { |
6 |
return getFooterLayout().isShown(); |
3、在Activity的代码如下:
01 |
public class MainActivity extends ListActivity { |
03 |
private PullToRefreshListView mPullToRefreshListView; |
05 |
private LinkedList<String> mItemList; |
06 |
private ArrayAdapter<String> adapter; |
08 |
private Context context; |
10 |
protected void onCreate(Bundle savedInstanceState) { |
11 |
super.onCreate(savedInstanceState); |
12 |
setContentView(R.layout.activity_main); |
16 |
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mItemList); |
19 |
mPullToRefreshListView = (PullToRefreshListView)findViewById(R.id.pull_refresh_list); |
20 |
ListView mListView = mPullToRefreshListView.getRefreshableView(); |
21 |
mListView.setAdapter(adapter); |
23 |
//设置pull-to-refresh模式为Mode.Both |
24 |
mPullToRefreshListView.setMode(Mode.BOTH); |
27 |
mPullToRefreshListView.setOnRefreshListener(new OnRefreshListener<ListView>() { |
30 |
public void onRefresh(PullToRefreshBase<ListView> refreshView) { |
32 |
if (refreshView.isHeaderShown()){ |
33 |
Toast.makeText(context, "下拉刷新",Toast.LENGTH_SHORT).show(); |
36 |
Toast.makeText(context, "上拉加载更多",Toast.LENGTH_SHORT).show(); |
46 |
private void initData(){ |
48 |
mItemList = new LinkedList<String>(); |
49 |
mItemList.addAll(Arrays.asList(data)); |
53 |
private String[] data = new String[]{"data1","data2","data3","data4","data5","data6", |
54 |
"data1","data2","data3","data4","data5","data6"}; |
如上代码所示,在OnRefresh的实现代码中,用以区分上拉还是下拉,关键代码如下:
1 |
if (refreshView.isHeaderShown()){ |
2 |
Toast.makeText(context, "下拉刷新",Toast.LENGTH_SHORT).show(); |
5 |
Toast.makeText(context, "上拉加载更多",Toast.LENGTH_SHORT).show(); |
至此,运行项目,可以得到演示结果了
原文地址 : http://www.dutycode.com/post-13.html
我的博客:http://www.dutycode.com
参考网址:http://blog.csdn.net/ueryueryuery/article/details/17440465
- mui的上拉加载更多 下拉刷新 自己封装的demo
----------------------------------------------- 这是一个非常呆萌的程序妹子,深夜码的丑代码------------------------------- ...
- mui实现分页上拉加载更多 下拉刷新数据的简单实现 移动端下拉上拉
空下来把mui上拉加载更多,下拉刷新数据做了一个简单的实现,希望可以帮助到需要的朋友 demo项目的结构 <!DOCTYPE html> <html> <head> ...
- android 支持上拉加载,下拉刷新的列表控件SwipeRefreshLayout的二次封装
上拉加载,下拉刷新的列表控件,大家一定都封装过,或者使用过 源代码,我会在最后贴出来 这篇代码主要是为了解决两个问题 1.滑动冲突得问题 2.listview无数据时,无数据布局的展示问题 下方列出的 ...
- 你必须了解的RecyclerView的五大开源项目-解决上拉加载、下拉刷新和添加Header、Footer等问题
前段时间做项目由于采用的MD设计,所以必须要使用RecyclerView全面代替ListView.但是开发中遇到了需要实现RecyclerView上拉加载.下拉刷新和添加Header以及Footer等 ...
- vue.js移动端app实战4:上拉加载以及下拉刷新
上拉加载以及下拉刷新都是移动端很常见的功能,在搜索或者一些分类列表页面常常会用到. 跟横向滚动一样,我们还是采用better-scroll这个库来实现.由于better已经更新了新的版本,之前是0.几 ...
- 移动端上拉加载,下拉刷新效果Demo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- vue-scroller实现vue单页面的上拉加载和下拉刷新问题
在vue中如何简单的实现页面的上拉加载和下拉刷新,在这里我推荐使用vue-scrolle插件. vue-scrolle的基本使用方法: 1.下载 npm i vue-scroller -D 2.导包 ...
- 使用mescroll实现上拉加载与下拉刷新
现在上拉加载与下拉刷新几乎已经是移动端必备功能之一了,自己实现一个太麻烦,但是好用的插件又非常少.之前看到网上很多人都在用iScroll,于是也尝试用它做了几个DEMO,但或多或少都有一些问题,比如这 ...
- C#构造方法(函数) C#方法重载 C#字段和属性 MUI实现上拉加载和下拉刷新 SVN常用功能介绍(二) SVN常用功能介绍(一) ASP.NET常用内置对象之——Server sql server——子查询 C#接口 字符串的本质 AJAX原生JavaScript写法
C#构造方法(函数) 一.概括 1.通常创建一个对象的方法如图: 通过 Student tom = new Student(); 创建tom对象,这种创建实例的形式被称为构造方法. 简述:用来初 ...
随机推荐
- 如何在Linux下创建与解压zip, tar, tar.gz和tar.bz2文件
这么多年来,数据压缩对我们来说是非常有用的.无论是在邮件中发送的图片用的zip文件还是在服务器压缩数据文件,我们都可以让下载更容易或者有效的节约磁盘空间.某些压缩格式有时允许我们以60%的比率(甚至更 ...
- Node.js:JavaScript脚本运行环境
Node.js https://nodejs.org/ 2016-08-03
- 基于Jquery的banner轮播插件,简单粗暴
新手练习封装插件,觉着在前端这一块的轮播比较多,各种旋转木马一类的3D旋转,技术不够,所以封装了一个简单的banner轮播插件,功能也比较简单,就是左右向的轮播. 先挂地址https://github ...
- 【转】WPF获取外部EXE图标最简单的方法
首先在工程添加对System.Drawing的引用 创建以下方法: public static ImageSource GetIcon(string fileName) { System.Drawin ...
- Node.js学习心得
最近花了三四周的时间学习了Node.js ,感觉Node.js在学习过程中和我大学所学的专业方向.NET在学习方法上有好多的相似之处,下面就将我学习的心得体会以及参考的资料总结归纳如下,希望对于刚入门 ...
- start-stop-daemon 命令
Usage: start-stop-daemon [<option> ...] <command> Commands: -S|–start — <argument> ...
- Bios里,把SATA Mode Selection改为AHCI无法启动
新装系统Win7_X64,将SATA Mode Selection改为AHCI后总是重启,baidu参考: SATA的硬盘就选AHCI(全称应该是SATA AHCI),AHCI可以提升硬盘的读写速度原 ...
- Python 基础篇:字符编码、函数
字符编码 在python2默认编码是ASCII, python3里默认是utf-8 unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so ...
- 测试MySQL事务管理
1.MySQL 版本 mysql> select version(); +------------+ | version() | +------------+ -log | +--------- ...
- python连接zookeeper的日志问题
用python连接zookeeper时,在终端里,一直会有zookeeper的日志冒出来,这样会很烦. -- ::,:(: Exceeded deadline by 11ms 解决方法是在连接后设置一 ...