分页功能实现思路

最近项目中开发了分页功能,开发过程中一边开发一边梳理思路,虽然马马虎虎开发完成了,但是总感觉有什么地方没有考虑到。写这篇博客的目的主要还是想再理顺一下思路,如果有考虑不到的地方还希望大家批评指正。再有就是当个知识点记录一下,以便日后查用。

功能需求很简单,我们有一个数据集,里面有很多条目,需要分页展示再我们的程序中,每页只显示固定的条目数,可以通过“首页”,“上一页”,“下一页”,“尾页”等类似索引跳转到每一页。下面对照这个需求梳理一下思路,下面是对于这个思路打的草稿。

//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;
    }
}

如果有考虑不到的地方还请指出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值