因为项目需求,要这么一个功能,需要用按钮来对数据进行分页,数据显示是用的ListView,然后用2个按钮来进行控制上下页,我在网上找了很多ListView的分页,好像并没有发现,基本上ListView分页都是“上拉加载更多”,那么没办法,只能自己来了,下面放上一些主要的代码。
首先,将分页封装成一个实体。
import java.util.List;然后在有ListView的Activity或者Fragment中定义
/**
* 页面数据实体
* Created by Se7en on 2016/1/19.
*/
public class PageInfo<E> {
private int page; // 页码
private int pageSize; // 一页显示多少条
private long totalRecords; // 数据总数
private List<E> resultList; // 数据集
public PageInfo(int page, int pageSize, long totalRecords, List<E> resultList) {
this.page = page;
this.pageSize = pageSize;
this.totalRecords = totalRecords;
this.resultList = resultList;
}
/**
* 得到总页数
*
* @return
*/
public int getTotalPages() {
int totalPages = (int) (totalRecords / pageSize);
if (totalRecords % pageSize != 0) {
totalPages += 1;
}
return totalPages;
}
public int getPage() {
return page;
}
public void setPage(int page) {
this.page = page;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public long getTotalRecords() {
return totalRecords;
}
public void setTotalRecords(long totalRecords) {
this.totalRecords = totalRecords;
}
public List<E> getResultList() {
return resultList;
}
public void setResultList(List<E> resultList) {
this.resultList = resultList;
}
}
private PageInfo<Student> pageInfo;然后写上下分页的方法
private List<Student> list = new ArrayList<Student>();
/** * 上一页 */ private void prePage() { int page = pageInfo.getPage() - 1; if (page < 1) { page = 1; Toast.makeText(this, "已经到达首页", Toast.LENGTH_SHORT).show(); } showPage(page); // 通知ListView的Adapter数据发生了改变adapter.notifyDataSetChanged(); } /** * 下一页 */ private void nextPage() { int page = pageInfo.getPage() + 1; if (page > pageInfo.getTotalPages()) { page = pageInfo.getTotalPages(); Toast.makeText(this,"已经到达末页",Toast.LENGTH_SHORT).show(); } showPage(page); // 通知ListView的Adapter数据发生了改变adapter.notifyDataSetChanged(); } private void showPage(int page) { // 在onCreate 或者 onCreateView 中showPage(1)显示第一页的数据,并通知ListView的Adapter数据发生了改变adapter.notifyDataSetChanged(); pageInfo = mgr.queryStudent(page, 5); // ***** 关键:定义DBManager帮助SQLite操作,从SQLite数据库中读取数据 list = pageInfo.getResultList(); }我认为最重要的就是怎么从SQLite读取数据了
/**
* 分页查询
* @return PageInfo<Student>
*/
public PageInfo<Student> queryStudent(int page,int pageSize){
List<Student> list = new ArrayList<Student>();
String sql = "select * from t_student where 1 = 1 order by _id DESC";
if(page > 0 && pageSize > 0){
sql += " limit ? offset ?";// 拼凑分页(第1个?表示提取数目,第2个?表示从第(?+1)位开始提取)*****关键步骤
int start = (page - 1) * pageSize;// 算出起始行
Cursor c = db.rawQuery(sql,new String[]{ pageSize + "", start + ""});
while (c.moveToNext()){
Student stu = new Student();
stu.setId(c.getInt(c.getColumnIndex("id")));
stu.setName(c.getString(c.getColumnIndex("name")));
stu.setSex(c.getString(c.getColumnIndex("sex")));
list.add(stu);
}
c.close();
}
return new PageInfo<Student>(page,pageSize,getTotalStudents(),list);
}
public long getTotalStudents(){
String sql = "select count(*) from t_student"; // 统计总数
Cursor c = db.rawQuery(sql,null);
c.moveToFirst(); // 游标移到第一条记录准备获取数据 *****关键步骤
long totalRecords = c.getLong(0); // 获取数据中的LONG类型数据
c.close();
return totalRecords;
}
以上就是主要的代码了,方法不知道是简单还是复杂,是以前刚开始学习Java时用来写后台管理系统分页用过的差不多的方法,可以说基本一样的思路,只是在Android里面实现起来比较不一样的是:数据库查询和数据更新,如果大家有不同的看法,或者用更好的办法,可以留言交流交流。