2013-08-18 11 views
8

Utworzono dynamiczny ListView, w którym obiekty są dodawane od góry.Android ListView setSelectionFromTop nie działa

Gdy użytkownik naciśnie przycisk, listView zostanie zaktualizowany z zawartości tablicy, wówczas funkcja notifyDataSetChanged() zostanie wywołana w niestandardowym tablicy arrayAdapter.

Teraz chcę mantain pozycję listy przy rozbudowie, więc dodałem ten kod:

 // pausedCounter trace the number of objects(lines) to add to the listView 
     int idx = listView.getFirstVisiblePosition() + pausedCounter; 
     View first = listView.getChildAt(0); 
     int position = 0; 

     if (first != null) 
      position = first.getTop(); 

     // cycle to add the new objects to the listView 
     for (Tweet[] tweets1 : pausedTweets) 
      super.updateTweets(tweets1); 


     listView.setSelectionFromTop(idx, position); 

     // reset of counter and accumulator 
     pausedTweets = new ArrayList<Tweet[]>(); 
     pausedCounter = 0; 

Ten kod zachowywać się w ten sposób: jeśli getFirstVisiblePosition zwraca 2, a pausedCounter wynosi 5, po aktualizacji lista zostanie ustawiona na 3 z pięciu nowych elementów.

To, czego chcę, to ustawić pierwszy widoczny element listy na 8.

Po dalszych badaniach okazało się, że liczba dzieci? ListView nie zmienia się w trakcie biegu tego kawałka kodu, więc aktualizuje rozmiar ListView po nazwałem setSelectionFromTop. Czy to może być problem?

Odpowiedz

19

Sztuką było to:

 listView.post(new Runnable() { 
      @Override 
      public void run() { 
       listView.setSelectionFromTop(idx, finalPosition); 
      } 
     }); 

Używanie po sposób pozwala czekać na aktualizację ListView przed zmianą położenia.

+0

dziękuję bardzo, z tym: listview.post (...) również listView.setSelection pracował dla mnie ponownie (nie działał w żaden inny sposób) – cV2