ListView onScroll被多次调用

时间:2015-02-07 11:49:35

标签: java android android-listview android-asynctask onscrolllistener

我知道之前已经问过这个问题,但我认为我非常接近我的解决方案,所以我希望这样做。 我正在使用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("");
                        }
                    }

到底有吗?如何确保在到达底部时只进行一次异步调用?

1 个答案:

答案 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;
        }