2011-08-23 27 views
6

Tengo tabView, mostrando la lista en cada pestaña. Cuando me desplazo en una pestaña, cambio a otra pestaña y vuelvo a la pestaña anterior, la posición vuelve a la parte superior en lugar de mostrar la posición anterior desplazada. Cómo logro esto ? Necesito saber cómo uso onSaveInstanceState & onRestoreInstanceState para guardar la posición y usar la posición guardada para mostrar la posición desplazada anterior.Cómo guardar y restaurar la posición de ListView en Android

Gracias de antemano.


Gracias por su respuesta. Intenté con todas las soluciones pero encontré otros problemas. Básicamente el problema que estoy enfrentando es el siguiente.

Tengo una vista de lista como mi primera actividad cuando inicio mi aplicación. Cuando hago clic en el elemento de la lista, se inicia la actividad de pestañas que contiene 3 pestañas. Las 3 pestañas usan la misma actividad llamada ListActivity. Pero 3 pestañas contienen datos diferentes. Mi pregunta es cómo mantener la posición de la lista cuando cambio entre las pestañas. Con las soluciones anteriores provistas, cuando cambio la posición en una pestaña, también afecta las pestañas restantes. Por ejemplo, si estoy en la posición 6 en la primera pestaña, esta posición se establecerá para la segunda y tercera pestaña, así como también estoy usando la misma actividad de lista para las 3 pestañas. No tengo permitido compartir el código. Entonces tengo que escribir el problema por tanto tiempo. También el número de pestañas creadas es dinámico. Puede ser 3 o 4 o 5. Pero todas las pestañas usan 1 ListActivity.

¿Alguien me puede dar un ejemplo de cómo lograr esto. 1. Single ListActivity utilizado en varias pestañas. 2. Mantener la posición del cursor en las pestañas sin afectar a otras pestañas.

Se agradece su solución provista. Gracias de antemano.

+0

Parece que va a crear un nuevo ListView o de alguna manera, actualice el contenido cada vez que cambie a una pestaña. ¿Podría publicar su código amablemente? –

+0

Por favor, vea el siguiente mensaje, que puede ayudarle a: http://stackoverflow.com/questions/3014089/maintain-save-restore-scroll-position-when-returning-to-a-listview – Xebozone

Respuesta

12

No vuelva a llamar a setAdapter() en la vista de lista. Haz algo como esto

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

Si necesita actualizar su llamada ListView notifyDataSetChanged() en el adaptador.

10

para obtener la posición actual de su ListView, puede llamar

int position = mCatchList.getFirstVisiblePosition(); 

Entonces una vez que navegar de nuevo a la pestaña con el ListView, puede llamar

mCatchList.setSelection(position); 

Dependerá de cómo su código está escrito para indicar si la posición deberá agregarse a savedInstanceState, o sin embargo.

+0

¿Es posible obtener la posición flotante? cuando lo hago, salta a la parte superior de la posición de vista –

+0

Creo que eso es posible obteniendo la vista más alta y descubriendo cuánto se muestra en la pantalla. No tengo un ejemplo para esto, pero estoy bastante seguro de que una búsqueda rápida traerá algo hasta – hooked82

+0

He encontrado que es posible guardar el objeto preestablecido y restaurarlo. –

1

Anule onSaveInstanceState para guardar la posición y vuelva a establecer la posición en onRestoreInstanceState. El paquete es algo así como un HashMap, (pseudo-código):

En onSaveInstanceState:

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

Luego, en onRestoreInstanceState:

pseudo.setPosition(bundle.getInt("MyTabsPosition")); 
Cuestiones relacionadas