Recordar la posición de un ListView

Si cambias a otra Activity, cuando regreses tu ListView habrá perdido la posición. Eso, a veces puede resultar bastante desconcertante. Una solución nos la cuentan en StackOverflow y es bastante sencilla de aplicar.

Puedes recoger la posición actual cuando abandonas la Activity obteniendo dos valores integer en tu onPause.

@Override 
public void onPause() {
	super.onPause();
	int index=lstListado.getFirstVisiblePosition();

	View v=lstListado.getChildAt(0);
	int top=(v==null) ? 0:(v.getTop()-lstListado.getPaddingTop());

	global.ponPosicion(index);
	global.ponTop(top);
}

Observa que que usamos la variable index para saber cual es la entrada que se veía en primer lugar en el listview. Pero puede ocurrir que esa entrada se viera a medias, así que usamos una segunda variable top para obtener cuánto se mostraba de ella.

Después usamos el método que queramos para guardar ambos valores. En mi caso, he almacenado ambos int usando variables globales, pero ese es otro tema para otra entrada.

Y ahora en el onResume, recogemos ambos valores y con ellos usamos el método setSelectionFromTop para poner el ListView como antes:

@Override
public void onResume() {
        super.onResume();
        int index=global.dimePosicion();
        int top=global.dimeTop();
        lstListado.setSelectionFromTop(index, top);
}
Fácil sí que es.
Be Sociable, Share!

Puedes seguir cualquier respuesta a esta entrada mediante el canal RSS 2.0. Puedes dejar un comentario o enviar un trackback desde tu propio sitio.

Deja un comentario

Disculpa, debes iniciar sesión para escribir un comentario.