1

Я знаю, что этот вопрос задан раньше, но я думаю, что я действительно близок к моему решению, и поэтому я хочу сделать это. Я использую ListView и заполняю его некоторыми данными. Теперь я пытаюсь заполнить его несколькими дополнительными данными, когда пользователь достигает дна. Это должно продолжаться до тех пор, пока в ListView будет меньше 100 элементов. Но приведенный ниже код добавляет все данные сразу, когда я впервые прокручиваю его донизу. Я думаю, что есть десятки вызовов моего метода асинхронного поиска, который загружает больше данных.ListView onScroll вызывается несколько раз

@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

создать булевую переменную и установить эту переменную в 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; 
     } 
+0

Спасибо, что помогли. Но теперь List List прокручивается вверху каждого раза при добавлении новых элементов. Что я могу сделать, чтобы помочь? –

+0

изменить связанный список, связанный со списком, и вызвать notifydatasetchanged() при завершении задачи –

+0

Я уже это делаю. –

Смежные вопросы