本文内容

  • 概述
  • 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.OnScrollListenerandroid.widget.ListView
  • 自定义 listview 的顶部 XListViewHeader 和底部 XListViewFooter,他们都继承 android.widget.LinearLayout
  • 自定义 XListView 的接口 IXListViewListenter,只有两个方法:onRefreshonLoadMore,这个接口很重要,以后你使用 XListView 控件的任何 Activity 和 Fragment 只要继承了这个接口,并实现其中的两个方法,就能实现 listview 的“下拉更新”和“上拉加载”功能。也就是说,如果下拉时,会调用你 Activity 和 Fragment 的 Override onRefresh 方法,而上拉时,则会调用 Override  onLoadMore 方法;
  • 显然,XListView 类需要组合 XListViewHeaderXListViewFooterIXListViewListenter

看结构后,再看 public 方法,你就能大概了解该控件的思路。

Android 演示 Android ListView 和 github XListView(1-3)

Android 演示 Android ListView 和 github XListView(3-3)

最新文章

  1. ajax的post方式和get方式比较,以及需要注意的地方
  2. JMeter 将上一个请求的结果作为下一个请求的参数——使用正则提取器(转载)
  3. SQL Server基本函数
  4. c++10 Seattle Clang error
  5. 20150224—ASP.NET基础
  6. 【JS】<select>标签小结
  7. windows进程间通信 .
  8. AX2012服务器配置--Windows Server 2012 如何实现多个用户远程桌面登陆?
  9. 食品药检所LIMS需求分析说明书
  10. 关于mysql的自增
  11. You don't seem to have 'make' or 'gmake' in your PATH
  12. STM8S 串口应用 UART2 STM8S105
  13. CastelWindsor Demo
  14. httpclient源码分析之MainClientExec
  15. 福科田led漫反射灯条生产工序
  16. 理解C语言中几个常见修饰符
  17. java-递归练习
  18. intellij idea在project下同时打开多个工程(maven工程)
  19. 《HelloGitHub月刊》第 02 期
  20. 二叉查找树及B-树、B+树、B*树变体

热门文章

  1. 《Go学习笔记 . 雨痕》类型
  2. Revit API遍历系统族布置喷头
  3. delphi Image 处理
  4. 没有可用的复制构造函数或复制构造函数声明为“explicit”
  5. Android之 系统启动流程
  6. java中Double类数字太大时页面正常显示而不要用科学计数法
  7. Linux tar包相关命令
  8. unity3d 5.6烘焙教程
  9. SharePoint 2013 workflows stop working (Failed on started.)
  10. 灵书妙探第一季/全集Castle迅雷下载