我知道已经问过这个问题,但是我认为我真的很接近我的解决方案,因此我希望这样做。
我正在使用ListView并用一些数据填充它。现在,当用户到达最低点时,我试图用一些更多的数据填充它。只要ListView中少于100个项目,此操作就应继续。但是下面的代码在我第一次滚动到底部时立即添加所有数据。我想我的异步方法有数十个调用,它们会加载更多数据。
@Override
public void onScroll(AbsListView absListView, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
scrollTask myscrolltask = new scrollTask();
int lastVisibleIndex = absListView.getLastVisiblePosition();
if(lastVisibleIndex != totalItemCount - 1)
{
System.out.print("lastVisibleIndex "+lastVisibleIndex);
System.out.print("totalItemCount-1 " + (totalItemCount-1));
myscrolltask.cancel(true);
return;
}
if(moreNewsAvailable == 0)
return;
if(totalItemCount > 75)
return;
Log.v("Total Item Count", String.valueOf(totalItemCount));
int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount && totalItemCount<=75 && moreNewsAvailable==1 && lastVisibleIndex != -1 && totalItemCount!=0) //Means that you have reached the bottom
{
Log.v("LastVisibleItemPosition", String.valueOf(lastVisibleIndex));
setProgressBarIndeterminateVisibility(true);
myscrolltask.execute("");
}
}
反正有吗?到达底部时,如何确保仅对异步进行一次调用?
最佳答案
创建一个布尔变量,并在任务执行时将该变量设置为true,然后在任务完成时将该布尔值再次设置为true。
检查任务是否正在进行,而不是按滚动方法执行。
if(!isLoading){
if(lastVisibleIndex != totalItemCount - 1)
{
System.out.print("lastVisibleIndex "+lastVisibleIndex);
System.out.print("totalItemCount-1 " + (totalItemCount-1));
myscrolltask.cancel(true);
return;
}
if(moreNewsAvailable == 0)
return;
if(totalItemCount > 75)
return;
}