最近项目中开发了分页功能,开发过程中一边开发一边梳理思路,虽然马马虎虎开发完成了,但是总感觉有什么地方没有考虑到。写这篇博客的目的主要还是想再理顺一下思路,如果有考虑不到的地方还希望大家批评指正。再有就是当个知识点记录一下,以便日后查用。
功能需求很简单,我们有一个数据集,里面有很多条目,需要分页展示再我们的程序中,每页只显示固定的条目数,可以通过“首页”,“上一页”,“下一页”,“尾页”等类似索引跳转到每一页。下面对照这个需求梳理一下思路,下面是对于这个思路打的草稿。
//1.定义一个容器来存储所有记录(数组,字典表都可以)。
Map<int,List<String>> Records;
//2.定义三个变量分别表示记录的总条数,记录的总页数,
//当前页码,一个常量(每页记录最大条数)。
#define COUNTOFPAGE 10;
int TotalItem;//记录总数
int Curpage; //当前页数
int TotalPage;//总页数
//3初始化处理:获取所有记录填充容器,当前页码初始化为-1,
//根据记录总数计算出总页数,填充首页数据,分别处理无记录(当前页码仍为-1),
//记录数少于每页最大记录数(当前页码赋值为1),
//记录数大于等于每页最大记录数(调用首页处理方法)。
{
TotalItem = Records.size();
TotalPage = TotalItem%COUNTOFPAGE ==0?TotalItem/COUNTOFPAGE:TotalItem/COUNTOFPAGE +1;
if(TotalItem==0)
{
Curpage= -1;
//调用首页处理的方法
}
if(TotalItem>ITEMCOUNTOFPAGE)
{
Curpage= 2;
//调用首页处理的方法
}
else
{
Curpage = 1;
for(int j =0;j<TotalItem;j++)
{
//获取数据,进行填充
Records.value((Curpage-1)*COUNTOFPAGE+j)
}
}
}
//4.首页处理:判断当前页码
//(=-1:提示无记录,=1:提示已经是首页,>1:当前页码=1,
//填充数据,这里不用再考虑记录总条数是否小于每页最大记录数,铁定是大于等于它的)。
{
if(Curpage!=-1)
{
if(Curpage == 1)
{
//提示已经是首页
return;
}
if(Curpage > 1)
{
Curpage = 1;
for(int j =0;j<COUNTOFPAGE;j++)
{
Records.value((Curpage-1)*COUNTOFPAGE+j)
}
}
}
else
{
//提示未查到数据
return;
}
}
//5.上一页处理:判断当前页
//(=-1:提示无记录,=1:提示已经是首页:>1:当前页码-1,
//填充数据,这里不用再考虑记录总条数是否小于每页最大记录数,铁定是大于等于它的)。
{
if(Curpage!=1)
{
//提示无记录
return;
}
if(Curpage==1)
{
//提示已经是首页
return;
}
if(Curpage>1)
{
Curpage--;
for(int j =0;j<COUNTOFPAGE;j++)
{
//获取数据,进行填充
Records.value((Curpage-1)*COUNTOFPAGE+j)
}
}
}
//6.下一页处理:判断当前页
//(=-1:提示无记录,=记录总页数:提示已经是尾页,
//<记录总页数:当前页码+1,再判断当前页码(=记录总页数并且并且恰好填充满最后一页:填充数据,
//=记录总页数但是填充不满最后一页:填充数据,<记录总页数:填充数据))。
{
if(Curpage!=1)
{
//提示无记录
return;
}
if(Curpage==TotalPage)
{
//提示已经是末页
return;
}
Curpage=++; //页码加1
if(Curpage==TotalPage)//判断是不是尾页
{
if(TotalItem%COUNTOFPAGE == 0)//如果是尾页并且恰好填充满最后一页
{
for(int j =0;j<COUNTOFPAGE;j++)
{
//获取数据,进行填充
Records.value((Curpage-1)*COUNTOFPAGE+j)
}
}
else//如果是尾页但是填充不满最后一页
{
for(int j =0;j<TotalItem%COUNTOFPAGE;j++)
{
//获取数据,进行填充
Records.value((Curpage-1)*COUNTOFPAGE+j)
}
}
}
else //不是最后页
{
for(int j =0;j<COUNTOFPAGE;j++)
{
//获取数据,进行填充
Records.value((Curpage-1)*COUNTOFPAGE+j)
}
}
}
//7.末页处理:判断当前页(=-1:提示无记录,=记录总页数:提示已经是尾页,
//<记录总页数:当前页码=记录总页数,
//(=记录总页数并且并且恰好填充满最后一页:填充数据,
//=记录总页数但是填充不满最后一页:填充数据,<记录总页数:填充数据))。
{
if(Curpage!=-1)
{
if(Curpage==TotalPage)
{
//提示已经是尾页
return;
}
if(Curpage<TotalPage) //判断当前页是否小于总页数
{
Curpage = TotalPage; //定位到最后页
if(TotalItem%COUNTOFPAGE == 0)//如果是尾页并且恰好填充满最后一页
{
for(int j =0;j<COUNTOFPAGE;j++)
{
//获取数据,进行填充
Records.value((Curpage-1)*COUNTOFPAGE+j)
}
}
else
{
for(int j =0;j<TotalItem%COUNTOFPAGE;j++)//如果是尾页但是填充不满最后一页
{
//获取数据,进行填充
Records.value((Curpage-1)*COUNTOFPAGE+j)
}
}
}
}
else
{
//提示未查询到数据
return;
}
}
如果有考虑不到的地方还请指出