我知道已经问过这个问题,但是我认为我真的很接近我的解决方案,因此我希望这样做。
我正在使用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;
        }

09-10 14:09
查看更多