我有一个andoird ListView和一个ListAdapter。
我想每次从服务器获取20个项目的块。
您如何建议我进行有效的分页?
每当getView返回位置10X的项目时,我都想过要获取一个包含10个项目的新块。
如果用户向上滚动,我会在开头提取10个新项目,如果用户向下滚动,我会在结尾处获取10个新项目。
我虽然使用布尔标志(isPassedNinthItem
)来检测滚动方向,但是知道9X是否在当前的10X项目之前(否则它是第11项)
更容易吗?
答案 0 :(得分:1)
检查一些无限滚动列表视图的来源,基本上你要做的是实现一个onScrollListener
并加载下一个'page'(替换为你的逻辑,例如一个偏移量) )如果满足所有条件:
public class EndlessScrollListener implements OnScrollListener {
private int visibleThreshold = 5;
private int currentPage = 0;
private int previousTotal = 0;
private boolean loading = true;
public EndlessScrollListener() {
}
public EndlessScrollListener(int visibleThreshold) {
this.visibleThreshold = visibleThreshold;
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (loading) {
if (totalItemCount > previousTotal) {
loading = false;
previousTotal = totalItemCount;
currentPage++;
}
}
if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) {
// I load the next page of gigs using a background task,
// but you can call any function here.
new LoadGigsTask().execute(currentPage + 1);
loading = true;
}
}
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
}