Android使用按钮实现ListView的上下分页

时间:2022-01-14 21:13:00

因为项目需求,要这么一个功能,需要用按钮来对数据进行分页,数据显示是用的ListView,然后用2个按钮来进行控制上下页,我在网上找了很多ListView的分页,好像并没有发现,基本上ListView分页都是“上拉加载更多”,那么没办法,只能自己来了,下面放上一些主要的代码。

首先,将分页封装成一个实体。

import java.util.List;

/**
* 页面数据实体
* 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;
}
}
然后在有ListView的Activity或者Fragment中定义

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里面实现起来比较不一样的是:数据库查询和数据更新,如果大家有不同的看法,或者用更好的办法,可以留言交流交流。