我正在创建一个ListView,我从服务器中获取新闻。我正在获取数据页面,即有一次我有一个页面有10个项目。在向下滚动我再次点击该Web服务并获得下一页数据显示但问题是假设我在服务器上总共有22项,并且在第一次尝试中我得到22到13然后12到3之后到最后2个数据网络服务一次又一次地点击。我不知道为什么只有2个数据时,网络服务会一次又一次地命中。而且我不知道如何加载上一页。
相同的代码
listNews.setOnScrollListener(new AbsListView.OnScrollListener() {
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
Log.e(TAG, "onScroll: "+firstVisibleItem +" "+visibleItemCount+" "+totalItemCount );
if(firstVisibleItem+visibleItemCount == totalItemCount && totalItemCount!=0)
{
callNewsApi((Integer.parseInt(currentPage)+1)+"");
}
}
});
答案 0 :(得分:0)
您需要在每次点击响应后验证最后一页。在服务器站点上更好的方法。但您也可以在客户端管理它。下面是一个例子。
private boolean isLastPage;
private int PER_PAGE_COUNT=10;
//@params size- size of data which you get form server each time hit i shoule <= PER_PAGE_COUNT
public void validateLastpage(int size) {
if(size==0){
isLastPage=true;
}else {
if (size % PER_PAGE_COUNT == 0) {
isLastPage = false;
} else {
isLastPage = true;
}
}
}
现在在每次点击时检查 isLastPage 。这将停止在服务器站点上没有更多数据后调用的额外网络。 在每个响应后使用新数据大小调用 validateLastpage(int size)。 在每个分页检查最后一页。
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
Log.e(TAG, "onScroll: "+firstVisibleItem +" "+visibleItemCount+" "+totalItemCount );
if (firstVisibleItem + visibleItemCount == totalItemCount && totalItemCount != 0) {
if(!isLastPage)
callNewsApi((Integer.parseInt(currentPage) + 1) + "");
}
}