[英]Android ListView setOnScrollListener
我的 setOnScrollListener 有問題。 每當我滾動到列表視圖的底部時,它就會一直調用我的 asynctask。 如何將 setOnScrollListener 設置為僅在到達底部時加載。
listview.setAdapter(adapter);
mProgressDialog.dismiss();
listview.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
int lastInScreen = firstVisibleItem + visibleItemCount;
if (lastInScreen == totalItemCount) {
new loadmore().execute();
} else {
}
}
);
每當您向下滾動列表視圖時都會調用 OnScroll 方法,因此最好的辦法是使用某種填充,例如此處實現的填充。
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) {
}
}
可見閾值- 在加載更多之前,低於當前滾動位置的最小項目數。
currentPage – 您加載的當前數據頁面
previousTotal – 上次加載后數據集中的項目總數
loading – 如果我們仍在等待最后一組數據加載,則為真。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.