2009-03-16 11 views
14
  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 Galería se actualizan automáticamente con esta nueva información.

Inicia mi ListView, comienzo un hilo y carga 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 Thread (solo desconocido).Android: actualiza la vista de lista después de que Thread carga datos de la red

¿Alguna idea?

Respuesta

19

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

Después, dejar que el problema repose durante unas dos semanas me encontré con la solution here:

Larga historia corta:

Presupuesto de enlace de arriba:

We must use a Handler object because we cannot update most UI objects while in a separate thread. When we send a message to the Handler it will get saved into a queue and get executed by the UI thread as soon as possible.

Una vez que echa un vistazo el código que ve obtiene lo que dice el autor.
NOTA: Incluso con un controlador, Android puede no permitirle actualizar un objeto de vista desde el método run() del subproceso. Recibí 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 conseguir alrededor de él he actualizado una matriz de datos en el método de mi run() y utiliza esa matriz para actualizar la vista en el método del manejador handleMessage().

Espero que esto ayude a otros por ahí.

4

Usted puede utilizar el slowAdapter para actualizar la vista:

SlowAdapter = new SlowAdapter(this); 

list.setAdapter(SlowAdapter); 
SlowAdapter.notifyDataSetChanged(); 
3

acaba de encontrar a mí mismo, mientras que la lectura de este hilo y tratando alrededor.

corta: AsyncTask 's método onProgressUpdate puede tocar el punto de vista: http://developer.android.com/reference/android/os/AsyncTask.html#onProgressUpdate(Progress...)

Antecedentes: que tenía que llamar a una nueva consulta en mi cursor de modo un ListView mantiene siendo actualizado mientras que la tarea llena la base de datos. La llamada a la consulta realizada en doInBackground ha fallado con el mencionado CalledFromWrongThreadException pero el mismo código en onProgressUpdate funciona.

Cuestiones relacionadas