2012-01-17 11 views
13

Speriamo che qualcuno possa aiutarmi con un leggero problema/confusione che ho con Viewpager e con il salvataggio dei dati.Viewpager Android per il salvataggio di dati e viste

PROBLEMA:

Quando lo scorrimento di tutti i quattro viste ho, la prima vista ha due filatori, due textviews che visualizzano una stringa o un elemento selezionato. se si passa alla terza pagina e si torna alla seconda pagina, i dati nella prima vista vengono persi. hense che ha bisogno di salvare i dati.

Questo dovrebbe essere fatto nelle due routine di seguito indicate? (la migliore ipotesi sarebbe) se così fosse, che tipo di comandi devono essere dichiarati?

CODICE:

@Override 
public void restoreState(Parcelable arg0, ClassLoader arg1) {  
} 

@Override 
public Parcelable saveState() { 
    return null; 
} 

INFORMAZIONI EXTRA: il viewpager viene utilizzato in

public Object instantiateItem(View collection, int position) { 
} 

L'elenco completo dei metodi sono i seguenti:

@Override 
public void destroyItem(View arg0, int arg1, Object arg2) { 
    ((ViewPager) arg0).removeView((View) arg2); 
} 

@Override 
public boolean isViewFromObject(View arg0, Object arg1) { 
    return arg0 == ((View) arg1); 
} 

@Override 
public Parcelable saveState() { 
    return null; 
} 

@Override 
public void finishUpdate(View arg0) { 
} 

@Override 
public void restoreState(Parcelable arg0, ClassLoader arg1) { 
} 

@Override 
public void startUpdate(View arg0) { 
} 
+1

arg0 è un nome di variabile grande! – Roel

risposta

46

Invece di salvare la stato di quelle pagine è possibile modificare il ViewPager in modo da bufferizzare tutte le pagine anziché distruggendoli e ricreandoli quando si scorre.

Così, per esempio se si dispone di 4 pagine:

ViewPager pager = (ViewPager) findViewById(R.id.viewpager); 
pager.setOffscreenPageLimit(3); // the number of "off screen" pages to keep loaded each side of the current page 
pager.setAdapter(new PageAdapter(context)); 

Ora le pagine saranno mantenuti 'vivo'

fare attenzione con questa tecnica, tuttavia, perché aumenterà il consumo di memoria. Il numero passato a setOffscreenPageLimit() è il numero di pagine su ciascun lato della pagina corrente da conservare. In questo caso abbiamo 4 pagine in totale, quindi lo scenario peggiore è quando siamo all'estremità del set di pagine - abbiamo la pagina attualmente visibile e quindi le restanti 3 pagine sono fuori schermo su un lato e sono quindi mantenute in memoria. Tuttavia, con un set di dati più ampio potrebbe potenzialmente significare che 7 pagine sono conservate in memoria (pagina corrente più 3 su entrambi i lati).

In genere, la soluzione ottimale sarebbe occuparsi correttamente dello scarico e del ricaricamento dello stato della pagina e del re-rendering.

Spero che questo aiuti

+0

non sapevo che ci fosse un limite di fuori campo, daremo un'occhiata a questo e ti faccio sapere. Grazie per i vostri consigli :) – Hadden11

+0

Non so se la sua qualcosa che sto facendo male, ma quando si entra in quello via limitano schermo si tratta con -> Il metodo setOffscreenPageLimit (int) non è definito per il tipo doesnt sembrano come essere collegato con un viewpager – Hadden11

+0

che aspetto ha l'importazione per il tuo viewpager? dovrebbe essere import android.support.v4.view.ViewPager; –

Problemi correlati