2013-05-01 16 views
12

Ho una piccola domanda per la mia app Android. Ho cercato a lungo ma non ho trovato nulla sul mio problema.Android - ListView Reverse come visualizzazione dei messaggi

Scenario: Ho per visualizzare un listview Ripristina (come Facebook Messenger). E quando l'utente scorre verso l'alto, carica più messaggi.

Problema: dopo la chiamata notifiyDataAsChanged(), la pergamena non è la stessa! Voglio conservare esattamente la stessa posizione di prima del caricamento.

ho provato che il codice:

// save index and top position 
int index = list.getFirstVisiblePosition()+result.size(); 
View v = list.getChildAt(index); 
int top = (v == null) ? 0 : v.getTop(); 

// ... 
// restore 
list.setSelectionFromTop(index, top); 

Ma il rotolo non è esattamente lo stesso dopo il caricamento.

Hai un'idea?

risposta

35

penso che si dovrebbe considerare di usare TranscriptMode e StackFromBottom con il vostro ListView:

android:stackFromBottom="true" 
android:transcriptMode="normal" 

Impostando la modalità di trascrizione alla normalità sarà scorrere fino alla fine solo se l'ultimo elemento era già in vista. In questo modo i tuoi utenti possono visualizzare gli elementi della lista precedente senza interruzioni quando chiami notifydatasetchanged.

+0

Grazie per il vostro aiuto. Non capisco il tuo post. Se sono sull'articolo 32, dopo averlo modificato, desidero essere di nuovo sull'articolo 32! Ma ora, quando questo metodo viene chiamato, io non sono su questo articolo ... –

+5

Questa risposta è fuorviante. 'stackFromBottom' sposta (impila) gli oggetti in basso, non crea ordine inverso. Gli oggetti vengono ancora aggiunti dal basso, che non è quello che ha chiesto @FlorianMacLanglade (sto cercando la stessa soluzione pure). – Diolor

+0

@Diolor ha ragione. 'stackfromBottom' è solo una parte di quello che vuoi. L'altra parte è l'ordine inverso a cui risponde qui: http://stackoverflow.com/questions/10941317/inverted-listview-in-android – Chris

2

Ho fissato questo utilizzando lo stesso codice come hai incluso ma aggiorna la variabile indice per il numero di elementi aggiungo all'adattatore prima di ripristinare la posizione. Sembra fare il trucco.

2

fare in questo modo:

Collections.reverse(YourList); // ADD THIS LINE TO REVERSE ORDER! 
YourList.notifyDataSetChanged; 
Problemi correlati