Android github XListView 分析(2-3)
本文内容
- 概述
- XListView UML 图
下载 github XListView
概述
我们经常能见到 app 中的 listview 有“下拉更多”和“上拉加载”的效果。如下图所示顶部和底部的变化:


图 1 常见的 Header 和 Footer
(左:顶部的三个状态;右:底部的三个状态)
很明显,无论是下拉还是上拉,顶部和底部都会有三个状态。如,
- 对于“下拉”操作,“下拉”一点,会提示“下拉更新”;若继续下拉,不松开,就变成“松开刷新”;期间箭头会有变化;一旦松开,就显示“正在加载”。
- 对于“上拉”操作,更上拉类似,只是提示稍微不同。当滑动 listview 到底部,看见“查看”
因此,listview 顶部和底部一共需要六个状态:“下拉刷新”、“松开刷新数据”、“正在加载...”、“上次更新时间:”、“查看更多”、“松开载入更多”。
需要在拉动 listview 时,能分别改变顶部和底部状态。这样,至少需要自定义三个类:自定义的 listview、header 和 footer。
而且 listview 要能知道用户拉动的高度是多少,事先会预定一个高度,比如,如果仅仅“下拉”一点,那么就提示“下拉刷新”;如果超过预定高度,就提示“松开刷新”,此时,要改变箭头的方向。
为了让自己的 Activity 或 Fragment 能使用封装的 listview,还需要定义一个接口。这样,只要继承这个接口,就能使用封装的 listview。
XListView UML 图

图 2 XListView UML 图
- 自定义 XListView 类,该类继承 android.widget.AbsListView.OnScrollListener 和 android.widget.ListView;
- 自定义 listview 的顶部 XListViewHeader 和底部 XListViewFooter,他们都继承 android.widget.LinearLayout;
- 自定义 XListView 的接口 IXListViewListenter,只有两个方法:onRefresh 和 onLoadMore,这个接口很重要,以后你使用 XListView 控件的任何 Activity 和 Fragment 只要继承了这个接口,并实现其中的两个方法,就能实现 listview 的“下拉更新”和“上拉加载”功能。也就是说,如果下拉时,会调用你 Activity 和 Fragment 的 Override onRefresh 方法,而上拉时,则会调用 Override onLoadMore 方法;
- 显然,XListView 类需要组合 XListViewHeader、XListViewFooter 和 IXListViewListenter。
看结构后,再看 public 方法,你就能大概了解该控件的思路。
Android 演示 Android ListView 和 github XListView(1-3)
Android 演示 Android ListView 和 github XListView(3-3)
Android github XListView 分析(2-3)的更多相关文章
- Android 演示 Android ListView 和 github XListView(3-3)
本文内容 环境 项目结构 演示 1:简单 XListView 演示 2:XListView + Fragment 演示 3:XListView + ViewPager + Fragment 本文三个演 ...
- Android 演示 Android ListView 和 github XListView(1-3)
本文内容 环境 项目结构 演示 1:ListView 演示 2:简单 XListView 演示 3:音乐列表 XListView 演示 4:另一个音乐列表 XListView 本文四个演示,循序渐进. ...
- Android APP性能分析方法及工具
近期读到<Speed up your app>一文.这是一篇关于Android APP性能分析.优化的文章.在这篇文章中,作者介绍他的APP分析优化规则.使用的工具和方法.我觉得值得大家借 ...
- Android HttpURLConnection源代码分析
Android HttpURLConnection源代码分析 之前写过HttpURLConnection与HttpClient的差别及选择.后来又分析了Volley的源代码. 近期又遇到了问题,想在V ...
- Android之mtklog分析
Android之mtklog分析 [海外场测反馈][xxx]动态测试时对比机xxxx拨打测试机xxxxx自动挂断电话 工作中遇到一个掉话的问题,需要分析log,log比较大,我也没法上传,就简答的讲讲 ...
- Android源码分析-全面理解Context
前言 Context在android中的作用不言而喻,当我们访问当前应用的资源,启动一个新的activity的时候都需要提供Context,而这个Context到底是什么呢,这个问题好像很好回答又好像 ...
- cocos2d-x for android:SimpleGame分析
cocos2d-x for android:SimpleGame分析 作为cocos2d-x的标配DEMO,SimpleGame可算是给入门学cocos2d-x的俺们这些新手门学习的对象了,那么来分析 ...
- Android内存机制分析1——了解Android堆和栈
//----------------------------------------------------------------------------------- Android内存机制分析1 ...
- Android 内存管理分析(四)
尊重原创作者,转载请注明出处: http://blog.csdn.net/gemmem/article/details/8920039 最近在网上看了不少Android内存管理方面的博文,但是文章大多 ...
随机推荐
- 酷播迷你flv,mp4网页视频播放器(CuPlayerMini)V2.2版[经典黑]演示实例
酷播迷你flv,mp4网页视频播放器(CuPlayerMini)V2.2版[经典黑]演示实例 http://www.cuplayer.com/cu/FreeDown/
- 使用C#的泛型队列Queue实现生产消费模式
本篇体验使用C#的泛型队列Queue<T>实现生产消费模式. 如果把生产消费想像成自动流水生产线的话,生产就是流水线的物料,消费就是某种设备对物料进行加工的行为,流水线就是队列. 现在,要 ...
- 委托、Lambda表达式、事件系列06,使用Action实现观察者模式,体验委托和事件的区别
在"实现观察者模式(Observer Pattern)的2种方式"中,曾经通过接口的方式.委托与事件的方式实现过观察者模式.本篇体验使用Action实现此模式,并从中体验委托与事件 ...
- AutoMapper在MVC中的运用05-映射中的忽略、处理null、多种映射转换
本篇AutoMapper使用场景: ※ 动态实现接口方法或属性 ※ 目标中的属性如果比源多,可以忽略多出的属性 ※ 目标有virtual属性,可忽略 ※ 目标属性值为null的解决办法 ※ int转s ...
- Windows Phone本地数据库(SQLCE):10、创建数据库(翻译) (转)
这是“windows phone mango本地数据库(sqlce)”系列短片文章的第十篇. 为了让你开始在Windows Phone Mango中使用数据库,这一系列短片文章将覆盖所有你需要知道的知 ...
- 连接查询简析 join 、 left join 、 right join
join :取两个表的合集: left join:左表的数据全部保留,然后增加右表与左表条件匹配的记录.如下 select cc.* from cloud_groups as cg left join ...
- 如何获得ios7系统中的蓝色
最简洁的办法,直接使用下列代码: [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0] 最彻底的办法: OS7Colors是U ...
- 设计模式之代理模式之二(Proxy)
from://http://www.cnblogs.com/xwdreamer/archive/2012/05/23/2515306.html 设计模式之代理模式之二(Proxy) 0.前言 在前 ...
- Ioc:autofac lifetime scope.
During application execution, you’ll need to make use of the components you registered. You do this ...
- mysql递归查询子类ID查询所有子类
先来看数据表的结构如下: id name parent_id --------------------------- 1 Home 0 2 About ...