最近,写一个通讯录项目要用到查询后分页显示,于是各种百度,(我是菜鸟,表笑)当然方法很多,我
只是分享一下我觉得简单的一种。
很多人都说先把满足条件的都查出来,存到集合ArrayList all中去,如果查到allRecorders项,而每一页最多显示lineSize行,于是计算出你需要显示多少页,举例说明吧,例如你查到了13行数据,而你每一页显示六行,那么你就3页数据要显示pagesize=3(这个可以用进一法算出),用一个int变量currentpage记录当前显示页数,第一页为1,一次类推,每按下一页按钮的时候如果currentpage小于3且下一页不是最后一页,则从查出来的数据集合all中挑(currentpage-1)*lineSize项到(currentpage-1)*lineSize+6项存到ArrayList onepage中去并显示在ListView中,如果是下一页最后一页计算出最后一页有多少行数据,同样添加到onepage中去即可(最后一页的数据一定小于等于6,不然怎么会是最后一行呢)当然上一页道理是一样的,不论是查询上一页还是下一页的数据如果有数据显示的话,一定要记得要先清空onepage中的数据,不然如果你直接往这个里面添加的话一定会大于6行数据的。
贴图:
private int currentPage = 1; //默认在第一页
private static final int lineSize = 6; //每次显示数
private int allRecorders = 0; //全部记录数
private int pageSize = 1; //默认共一页
private int pagefirst=0;//显示页第一行下标
last=(Button) findViewById(R.id.last);//上一页
last.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(currentPage!=1){
pagefirst-=lineSize;
currentPage--;
myList.clear();
for(int i=0;i<lineSize;i++){
Contact contact=(Contact) contacts.get(pagefirst+i);
HashMap map=new HashMap();
map.put("tv_name", contact.getName());
map.put("tv_mobilephone", contact.getPhone());
map.put("tv_image",contact.getGender().equals("男")?R.drawable.male:R.drawable.female);
myList.add(map);
//Toast.makeText(MainActivity.this, contact.getName(), Toast.LENGTH_SHORT).show();
}
adapter =new SimpleAdapter(MainActivity.this,myList,
R.layout.item_contact,new String[]{"tv_name","tv_mobilephone","tv_image"},
new int[]{R.id.tv_name,R.id.tv_mobilephone,R.id.tv_image});
contactList.setAdapter(adapter);
}
}
});
next=(Button) findViewById(R.id.next);//下一页
next.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if(currentPage<pageSize){
pagefirst+=lineSize;
currentPage++;
if(currentPage==pageSize){
myList.clear();
int beforesize=lineSize*(currentPage-1);
for(int i=0;i<allRecorders-beforesize;i++){
Contact contact=(Contact) contacts.get(pagefirst+i);
HashMap map=new HashMap();
map.put("tv_name", contact.getName());
map.put("tv_mobilephone", contact.getPhone());
map.put("tv_image",contact.getGender().equals("男")?R.drawable.male:R.drawable.female);
myList.add(map);
//Toast.makeText(MainActivity.this, contact.getName(), Toast.LENGTH_SHORT).show();
}
adapter =new SimpleAdapter(MainActivity.this,myList,
R.layout.item_contact,new String[]{"tv_name","tv_mobilephone","tv_image"},
new int[]{R.id.tv_name,R.id.tv_mobilephone,R.id.tv_image});
contactList.setAdapter(adapter);
//Toast.makeText(MainActivity.this, "next"+pagefirst, 1).show();
}else{
myList.clear();
for(int i=0;i<lineSize;i++){
Contact contact=(Contact) contacts.get(pagefirst+i);
HashMap map=new HashMap();
map.put("tv_name", contact.getName());
map.put("tv_mobilephone", contact.getPhone());
map.put("tv_image",contact.getGender().equals("男")?R.drawable.male:R.drawable.female);
myList.add(map);
// Toast.makeText(MainActivity.this, contact.getName(), Toast.LENGTH_SHORT).show();
}
adapter =new SimpleAdapter(MainActivity.this,myList,
R.layout.item_contact,new String[]{"tv_name","tv_mobilephone","tv_image"},
new int[]{R.id.tv_name,R.id.tv_mobilephone,R.id.tv_image});
contactList.setAdapter(adapter);
//Toast.makeText(MainActivity.this, "next"+pagefirst, 1).show();
}
}
}
});
}
希望有帮助!!!