本文实例讲述了android实现listview分页的方法。分享给大家供大家参考。具体分析如下:
最近做了下listview的分页,跟WEB上的分页是一个意思,需要那几个分页参数,不同的是sqlite中分页的查询语句,简便的方法需要用Limit,Offset关键字,前者是查询每页展示的记录数,后者是越过多少记录数,说得明白点就是忽略前面多少行记录之后,取多少行记录
我分页采用了一个重要的类Page,通过封装Page类,做为参数传递进来,返回出去也是个Page对象
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 import java.util.Collections; import java.util.List; /** * 注意所有序号从1开始. * * @param <T> Page中记录的类型. * */ public class Page<T> { //-- 公共变量 --// public static final String ASC = "asc"; public static final String DESC = "desc"; //-- 分页参数 --// protected int pageNo = 0;// 当前页号<跟取数据的方式有关系> protected int pageSize = 1;// 每页显示的记录数 protected String orderBy = null; protected String order = null; protected boolean autoCount = true; //-- 返回结果 --// protected List<T> result = Collections.emptyList(); protected long totalCount = -1;// 总记录数 //-- 构造函数 --// public Page() { } public Page(final int pageSize) { setPageSize(pageSize); } public Page(final int pageSize, final boolean autoCount) { setPageSize(pageSize); setAutoCount(autoCount); } //-- 访问查询参数函数 --// /** * 获得当前页的页号,序号从0开始,默认为0. */ public int getPageNo() { return pageNo; } /** * 设置当前页的页号,序号从0开始,低于0时自动调整为0. */ public void setPageNo(final int pageNo) { this.pageNo = pageNo; if (pageNo < 0) { this.pageNo = 0; } } /** * 获得每页的记录数量,默认为1. */ public int getPageSize() { return pageSize; } /** * 设置每页的记录数量,低于0时自动调整为0. */ public void setPageSize(final int pageSize) { this.pageSize = pageSize; if (pageSize < 0) { this.pageSize = 0; } } /** * 根据pageNo和pageSize计算当前页第一条记录在总结果集中的位置,序号从0开始. */ public int getFirst() { return (pageNo * pageSize) + 1; } /** * 获得排序字段,无默认值.多个排序字段时用','分隔. */ public String getOrderBy() { return orderBy; } /** * 设置排序字段,多个排序字段时用','分隔. */ public void setOrderBy(final String orderBy) { this.orderBy = orderBy; } /** * 获得排序方向. */ public String getOrder() { return order; } /** * 设置排序方式. * * @param order 可选值为desc或asc */ public void setOrder(String order) { this.order = order; } /** * 查询对象时是否自动另外执行count查询获取总记录数, 默认为false. */ public boolean isAutoCount() { return autoCount; } /** * 查询对象时是否自动另外执行count查询获取总记录数. */ public void setAutoCount(final boolean autoCount) { this.autoCount = autoCount; } //-- 访问查询结果函数 --// /** * 取得页内的记录列表. */ public List<T> getResult() { return result; } /** * 设置页内的记录列表. */ public void setResult(final List<T> result) { this.result = result; } /** * 取得总记录数, 默认值为-1. */ public long getTotalCount() { return totalCount; } /** * 设置总记录数. */ public void setTotalCount(final long totalCount) { this.totalCount = totalCount; } /** * 根据pageSize与totalCount计算总页数, 默认值为-1. */ public long getTotalPages() { if (totalCount < 0) return -1; long count = totalCount / pageSize; if (totalCount % pageSize > 0) { count++; } return count; } /** * 是否还有下一页. */ public boolean isHasNext() { return (pageNo + 1 < getTotalPages()); } /** * 取得下页的页号, 序号从0开始. * 当前页为尾页时仍返回尾页序号. */ public int getNextPage() { if (isHasNext()) return pageNo + 1; else return pageNo; } /** * 是否还有上一页. */ public boolean isHasPre() { return (pageNo - 1 >= 0); } /** * 取得上页的页号, 序号从1开始. * 当前页为首页时返回首页序号. */ public int getPrePage() { if (isHasPre()) return pageNo - 1; else return pageNo; } }新闻热点
疑难解答