2013-08-18 22 views
8

Ho creato un ListView dinamico in cui gli oggetti vengono aggiunti dall'alto.Android ListView setSelectionFromTop non funziona

Quando l'utente preme un pulsante, listView viene aggiornato dal contenuto di un array, quindi notifyDataSetChanged() viene chiamato sull'arrayAdapter personalizzato.

Ora voglio mantenere la posizione di lista quando si aggiungono, così ho aggiunto questo codice:

 // 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; 

Questo codice si comportano in questo modo: se il getFirstVisiblePosition restituisce 2, ed il pausedCounter è 5, dopo l'aggiornamento l'elenco sarà impostato sul 3 dei nuovi cinque elementi.

Quello che voglio è avere il primo elemento visibile della lista impostato sull'8.

Dopo ulteriori test ho scoperto che il numero di bambini di ListView non cambia durante la corsa di questo pezzo di codice, in modo che aggiorna la dimensione del listView dopo ho chiamato setSelectionFromTop. Potrebbe essere questo il problema?

risposta

19

Il trucco è stato questo:

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

Utilizzando le postale metodo permette di attendere l'aggiornamento della ListView prima di cambiare posizione.

+0

grazie mille, con questo: listview.post (...) anche listView.setSelection ha funzionato di nuovo per me (non ha funzionato in nessun altro modo) – cV2

Problemi correlati