我写过这样的页号,不过现在没有代码。写一下算法:
1.设定一个showCount,表示最多显示多少个页号。
假如showCount=9,且页面数不小于30页,那么第一页显示:
共xxx条记录,yyy页 (1) 2 3 4 5 6 7 8 9 >> >|
第25页显示
共xxx条记录,yyy页 |< << 21 22 23 24 (25) 26 27 28 29 >> >|2.当前页信息需要包括:
pageSize:每页多少条记录
currentPage:当前第几页(从0开始)
totalSize:共有多少条记录
pageSize和currentPage是页面或自己设的,totalSize这个很容易从数据库取到。这样我们可以计算出一共有Math.ceil(((double)totalSize)/((double)pageSize))页
于是解决了"共xxx条记录,yyy页"的部分3.然后我们计算需要显示的第一个页号和最后一个页号,这个要同时计算
初始 pageCount = 前面计算的页数
a. firstPage = currentPage - (showCount/2);  // 显示当前页前面的页号
b. if(firstPage < 0) firstPage = 0; // firstPage不小于0
c. lastPage = firstPage + showCount; // 注意:lastPage并不会显示
// 比如firstPage=0,lastPage=9,只会显示从0-8
d. if(lastPage > pageCount) {
       lastPage = pageCount;   // lastPage不能比总页数大
       firstPage = lastPage - showCount    // 尽可能多显示页号
       if(firstPage < 0) firstPage = 0;    // firstPage不小于0
    }4. 最后我们在页面上显示页号
a. 如果firstPage>0,那么显示 |< 效果是currentPage = firstPage - 1;
b. 如果currentPage>0, 那么显示 << 效果是currentPage = currentPage -1;
c. for(int i=firstPage; i<lastPage; i++)
       显示(i+1) 效果是currentPage = i;
d. 如果currentPage<pageCount-1, 那么显示 >> 效果是currentPage = currentPage + 1;
e. 如果lastPage<pageCount-1, 那么显示 >| 效果是currentPage = lastPage;算法结束