2012-01-17 12 views
13

Espero que alguien pueda ayudarme con un ligero problema/confusión que tengo con Viewpagers y al guardar datos.Android Viewpager guardando datos y vistas

PROBLEMA:

Al desplazarse a través de las cuatro vistas que tengo, la primera vista tiene dos hiladores, dos textviews que muestran una cuerda o un elemento seleccionado. si me desplazo a la tercera página y regreso a la segunda página, los datos en la primera vista se pierden. hense necesidad de guardar los datos.

¿Esto se haría en las dos rutinas que se detallan a continuación? (lo mejor es que sería) en caso afirmativo, ¿qué tipo de comandos deben indicarse?

CÓDIGO:

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

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

Información adicional: la ViewPager está siendo utilizado en

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

La lista completa de métodos son los siguientes:

@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 es un gran nombre de variable! – Roel

Respuesta

46

lugar de guardar el estado de esas páginas puede modificar su ViewPager para que almacene todas sus páginas en lugar de destruyéndolos y recreándolos cuando te desplazas.

Así, por ejemplo, si tiene 4 páginas:

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

Ahora sus páginas se mantendrá 'vivo'

tener cuidado con esta técnica, sin embargo, ya que aumentará el consumo de memoria. El número transferido a setOffscreenPageLimit() es el número de páginas que se retendrá en cada lado de la página actual. En este caso, tenemos 4 páginas en total, por lo que el peor de los casos es cuando estamos en el extremo del conjunto de páginas: tenemos la página visible actualmente y las 3 páginas restantes están fuera de la pantalla y se mantienen así en memoria. Sin embargo, con un conjunto de datos más grande, podría significar que se guardan 7 páginas en la memoria (página actual más 3 en cada lado).

Generalmente, la solución más óptima sería tratar adecuadamente con la descarga y recarga del estado de la página y volver a procesarlos.

Espero que esto ayude

+0

no sabía que había un límite fuera de la pantalla, lo echaré un vistazo y le haré saber. Gracias por su consejo :) – Hadden11

+0

no sé si es algo que estoy haciendo mal, pero al entrar en eso de limitar la pantalla que aparece con -> El método setOffscreenPageLimit (int) no está definido para el tipo tampoco parece como estar vinculado con un viewpager – Hadden11

+0

¿cómo se ve la importación para su viewpager? debe importarse android.support.v4.view.ViewPager; –

Cuestiones relacionadas