在List

时间:2017-12-14 05:15:39

标签: android android-layout listview android-fragments pagination

response from webservice我正在创建一个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)+"");
            }
        }
    });

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) + "");
    }
}