update studio refrescar programacion móviles mostrar desarrollo datos curso aplicaciones actualizar android listview

studio - Android: actualice Listview después de que Thread cargue datos de la red



refresh listview android (3)

Lo encontré yo mismo mientras leía este hilo y probaba.

Corto: el método de AsyncTask en ProgressUpdate puede tocar la vista : http://developer.android.com/reference/android/os/AsyncTask.html#onProgressUpdate (Progress ...)

Fondo: Necesitaba llamar a requery en mi cursor para que se actualizara ListView mientras la tarea llenaba la base de datos. La llamada a la consulta realizada en doInBackground falló con la mencionada CalledFromWrongThreadException, pero el mismo código en onProgressUpdate funciona.

  1. Me gusta que mi GUI aparezca inmediatamente cuando el usuario inicia la aplicación.
  2. Luego algunos datos (texto, imágenes) se cargan en segundo plano (como la aplicación de YouTube).
  3. ListView y Gallery se actualizan automáticamente con esta nueva información.

Inicié mi ListView, comencé un hilo y cargué los datos ... ¡y luego el ListView no se actualiza! Varias personas me dijeron que debería usar notifyDataSetChanged() . Pero no puedo colocar este comando en mi hilo (solo desconocido).

¿Algunas ideas?


Tengo el mismo problema ... y me emocioné cuando me encontré con esta pregunta. ¿Pero sin respuesta? :-(

Después, dejando que el problema repose durante unas dos semanas, encontré la solución aquí :

Larga historia corta:

Cita desde el enlace de arriba:

Debemos usar un objeto Handler porque no podemos actualizar la mayoría de los objetos UI mientras estamos en un hilo separado. Cuando enviamos un mensaje al Manejador, se guardará en una cola y se ejecutará con el hilo de la interfaz de usuario lo antes posible.

Una vez que revises el código, ves lo que dice el autor.
NOTA: incluso con un controlador, Android puede no permitirle actualizar un objeto de vista desde el método run () de la secuencia. Tengo este error:

05-31 02:12:17.064: ERROR/AndroidRuntime(881): android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

Para evitarlo, actualicé una matriz de datos en mi método run () y usé esa matriz para actualizar la vista en el método handleMessage () del manejador.

Espero que esto ayude a otros por ahí.


Puede usar slowAdapter para actualizar la Vista:

SlowAdapter = new SlowAdapter(this); list.setAdapter(SlowAdapter); SlowAdapter.notifyDataSetChanged();