本文實例講述了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) {