2011-08-23 12 views
6

Ho tabView, visualizzando l'elenco in ogni scheda. Quando si scorre in una scheda, passare a un'altra scheda e tornare alla scheda precedente, la posizione viene restituita in cima invece di visualizzare la precedente posizione a scorrimento. Come ottengo questo? È necessario sapere come utilizzare onSaveInstanceState & onRestoreInstanceState per salvare la posizione e utilizzare la posizione salvata nella visualizzazione della precedente posizione a scorrimento.Come salvare e ripristinare la posizione di ListView su Android

Grazie in anticipo.


Grazie per la vostra risposta. Ho provato con tutte le soluzioni ma ho incontrato altri problemi. Fondamentalmente il problema che sto affrontando è il seguente.

Ho una listview come prima attività quando avvio la mia app. Quando faccio clic sulla voce dell'elenco, avvia l'attività della scheda contenente 3 schede. Tutte e 3 le schede utilizzano la stessa attività chiamata ListActivity. Ma 3 schede contiene dati diversi. La mia domanda è come mantenere la posizione dell'elenco quando passo da una tabulazione all'altra. Con le soluzioni sopra fornite, quando cambio la posizione in una scheda, influisce anche sulle altre schede. Ad esempio, se sono nella posizione 6 nella prima scheda, questa posizione verrà impostata per la seconda e terza scheda e sto utilizzando la stessa ListActivity per tutte e 3 le schede. Non sono autorizzato a condividere il codice. Quindi devi scrivere il problema così a lungo. Anche il numero di schede create è dinamico. Potrebbe essere 3 o 4 o 5. Ma tutte le schede utilizzano 1 ListActivity.

Qualcuno può darmi un esempio su come ottenerlo. 1. Elenco singoloAttività utilizzata in più schede. 2. Mantenimento della posizione del cursore nelle schede senza influire sulle altre schede.

La vostra soluzione fornita è apprezzata. Grazie in anticipo.

+0

Sembra che si sta creando un nuovo ListView o in qualche modo aggiornare il contenuto ogni volta che si passa a una scheda. Potresti cortesemente postare il tuo codice? –

+0

Vedere il seguente post, che può aiutare a: http://stackoverflow.com/questions/3014089/maintain-save-restore-scroll-position-when-returning-to-a-listview – Xebozone

risposta

12

Non chiamare nuovamente setAdapter() nella visualizzazione elenco. Fai qualcosa del genere.

if(myListView.getAdapter() == null) 
    myListView.setAdapter(new myAdapter(this, R.layout.row, items)); 

Se è necessario aggiornare la vostra chiamata ListView notifyDataSetChanged() sull'adattatore.

10

per ottenere la posizione corrente del ListView, è possibile chiamare

int position = mCatchList.getFirstVisiblePosition(); 

Poi una volta che navigare indietro alla scheda con quella ListView, è possibile chiamare

mCatchList.setSelection(position); 

Dipenderà da come il tuo codice è scritto per dire se la posizione dovrà essere aggiunta a savedInstanceState, o comunque.

+0

E ' possibile ottenere la posizione fluttuante? quando lo faccio salta in cima alla posizione della vista –

+0

Credo che sia possibile ottenere la vista più in alto e scoprire quanto viene mostrato sullo schermo. Non ho un esempio per questo, ma sono abbastanza sicuro che una ricerca rapida porterà qualcosa in più – hooked82

+0

Ho scoperto che è possibile salvare l'oggetto preimpostato e ripristinarlo. –

1

Ignorare onSaveInstanceState per salvare la posizione e reimpostare la posizione in onRestoreInstanceState. Il Bundle è un po 'come un HashMap, (pseudo-codice):

In onSaveInstanceState:

bundle.putInt("MyTabsPosition", getPosition()); 

Poi nel onRestoreInstanceState:

pseudo.setPosition(bundle.getInt("MyTabsPosition")); 
Problemi correlati