我知道之前已经问过这个问题,但我认为我非常接近我的解决方案,所以我希望这样做。 我正在使用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("");
}
}
到底有吗?如何确保在到达底部时只进行一次异步调用?
答案 0 :(得分:1)
创建一个布尔变量并在任务执行中将该变量设置为true,并在任务完成时再将该Boolean设置为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;
}