Java 多次调用ListView onScroll
我知道以前有人问过这个问题,但我认为我真的很接近我的解决方案,因此我希望这样做。 我正在使用ListView并用一些数据填充它。现在,当用户到达底部时,我尝试用更多的数据填充它。只要ListView中的项目少于100项,这种情况就会持续。但下面的代码在我第一次将其滚动到底部时会立即添加所有数据。我猜有几十个调用我的异步方法来加载更多数据Java 多次调用ListView onScroll,java,android,android-listview,android-asynctask,onscrolllistener,Java,Android,Android Listview,Android Asynctask,Onscrolllistener,我知道以前有人问过这个问题,但我认为我真的很接近我的解决方案,因此我希望这样做。 我正在使用ListView并用一些数据填充它。现在,当用户到达底部时,我尝试用更多的数据填充它。只要ListView中的项目少于100项,这种情况就会持续。但下面的代码在我第一次将其滚动到底部时会立即添加所有数据。我猜有几十个调用我的异步方法来加载更多数据 @Override public void onScroll(AbsListView absListView, int
@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("");
}
}
@覆盖
public void onScroll(AbsListView AbsListView,int firstVisibleItem,
int visibleItemCount,int totalItemCount){
scrollTask myscrolltask=新建scrollTask();
int lastVisibleIndex=absListView.getLastVisiblePosition();
如果(lastVisibleIndex!=totalItemCount-1)
{
系统输出打印(“lastVisibleIndex”+lastVisibleIndex);
系统输出打印(“totalItemCount-1”+(totalItemCount-1));
myscrolltask.cancel(true);
返回;
}
如果(moreNewsAvailable==0)
返回;
如果(totalItemCount>75)
返回;
Log.v(“项目总数”,String.valueOf(totalItemCount));
int lastItem=firstVisibleItem+visibleItemCount;
如果(lastItem==totalItemCount&&totalItemCount创建一个布尔变量,并在任务执行时将该变量设置为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;
}
感谢您的帮助。但是现在,每次添加新项目时,列表视图都会滚动到顶部。我可以做些什么来帮助它?更改与listview附加的相关列表并调用notifydatasetchanged()任务完成时请注意,您没有在任务中设置适配器。您只需在任务中通知。在初始化列表后立即设置适配器。如果适配器已被删除或重置,列表视图将重置滚动位置。因此,如果我更改传递到适配器的数组中的值,我不需要重置适配器?我只需要通知?对吗?