2012-03-26 11 views
5

Tengo una vista de lista que se actualiza cada 5 segundos, usando un análisis XML. Después de actualizar, la posición actual de la lista vuelve a la primera posición. ¿Hay alguna manera posible de resolver esto?Vista de lista volver a la posición superior después de actualizar los datos en arrayadapter

+0

Cuéntanos cómo estás actualizando la lista de la lista. – flo

+0

Probablemente borre los datos de la lista y configure todos los nuevos. Puede utilizar el método http://developer.android.com/reference/android/view/View.html scrollTo (int, int) – pleerock

+0

@flo 'TimerMethod public void() { \t \t runOnUiThread (nueva Ejecutable() { \t \t \t public void run() { \t \t \t \t // Toast.makeText (getApplicationContext(), "Hola, este es piyush", \t \t \t \t // Toast.LENGTH_LONG) .show(); \t \t \t \t análisis sintáctico (enlace); \t \t \t \t setAdapter(); \t \t \t} \t \t}); ' llama a este método cada 5sec. parse() usando para el análisis xml y setAdapter() para identificar nuevos valores para el adaptador de lista – ASP

Respuesta

3

Uso lv.smoothScrollToPosition(pos) en pos podrían ser cualquier int, preferiblemente la longitud del adaptador, si desea que la vista de lista para el desplazamiento automático a la última entrada añadida, ya que se actualiza.

public void smoothScrollToPosition (int position) 


Smoothly scroll to the specified adapter position. The view will scroll such that the indicated position is displayed. 
+0

Para mi caso, esta era la única opción que realmente funcionaría incluso una vez que se hubiera disparado notifyDataSetChanged(). – greg7gkb

5

Al usar setAdapter() para actualizar una lista, Android restablece la posición. Intenta modificar el adaptador en su lugar.

No sé qué adaptador está usando, así que aquí dos ejemplos.

ArrayAdapter

adapter = list.getAdapter(); 
if (adapter == null) { 
    // Create new adapter + list.setAdapter() 
} else { 
    adapter.clear(); 
    adapter.addAll(newData); 
    adapter.notify(notifyDataSetChanged()); 
} 

CursorAdapter

adapter.changeCursor(newCursor); 
+0

gracias por su respuesta. Aquí estoy usando ArrayAdapter. Pero no recibí la "lista" que mencionaste anteriormente. La lista – ASP

+0

representa el ListView que está utilizando. – flo

+0

Eres un buen hombre, @flo –

2

Este código le ayudará a cabo ....

// get position of listview 
int index = listView.getFirstVisiblePosition(); 
View v = listView.getChildAt(0); 
int top = (v == null) ? 0 : v.getTop(); 

// notify dataset changed or re-assign adapter here 

//re-assign the position of listview after setting the adapter again 
listView.setSelectionFromTop(index, top); 

Saludos :)

+0

excelente !!! ... – ajay

-1

tratan este

adapter.notifyDataSetChanged(); 
Cuestiones relacionadas