Java 多次调用ListView onScroll

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

我知道以前有人问过这个问题,但我认为我真的很接近我的解决方案,因此我希望这样做。 我正在使用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("");
                        }
                    }
@覆盖
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()任务完成时请注意,您没有在任务中设置适配器。您只需在任务中通知。在初始化列表后立即设置适配器。如果适配器已被删除或重置,列表视图将重置滚动位置。因此,如果我更改传递到适配器的数组中的值,我不需要重置适配器?我只需要通知?对吗?