2010-07-26 19 views
10

Hay otras aplicaciones que hacen esto, como Twitter, Facebook o incluso aplicaciones nativas como Android Market. Cuando desee mostrar una lista de elementos recuperados de Internet, esto parece una forma estándar de mostrar al usuario alguna notificación sobre la acción en curso. Esta es una pantalla de fondo blanco con una rueda giratoria animada y un texto "Cargando ...".Cómo mostrar un texto "Cargando ..." al recuperar elementos para un ListView

¿Alguien sabe cómo hacer esto?

He podido hacer algo similar con este código, pero todavía no me gusta demasiado. Todavía trabajo en curso:

<ListView android:id="@+id/post_list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

    <TextView android:id="@android:id/loading" 
     android:background="@color/white" 
     android:layout_width="fill_parent"  
     android:layout_height="fill_parent" 
     android:gravity="center" android:text="Loading..." /> 

Respuesta

5

Al usuario se desplaza a la parte inferior de su getView adaptador debe devolver una vista con "Cargando .." texto y el progreso de girar. Al mismo tiempo, se debe iniciar AsyncTask o la secuencia de fondo que descarga un nuevo fragmento de contenido. Cuando el contenido está listo, se llama a adapter.notifyDatasetChanged() y ListView vuelve a mostrar todo el contenido, incluidos los nuevos elementos.

Así que el mensaje "Cargando ..." es solo un último elemento en el ListView.

+0

Hola Fedor! (alias "el hombre que resolvió el error OOM"). Me gusta más tu respuesta. ¿Tienes un fragmento para eso? De lo contrario, creo que puedo resolverlo ... – ggomeze

+0

Lo siento, no tengo fragmento. Solo uso este enfoque en mis proyectos y funciona bien. Supongo que Market hace algo así. – Fedor

+0

Me pareció interesante el método setEmptyView de ListView. Allí puede agregar el widget de barra de proceso con un texto. Todavía no lo he hecho funcionar perfectamente ... :-( – ggomeze

7

que se hace con la ayuda de AsyncTask (un hilo apaisada inteligente) y ProgressDialog

Cuando el AsyncTask comienza nos reaise un progressdialog con estado indeterminado, una vez finalizada la tarea descartamos el diálogo.

código Ejemplo
Lo que hace el adaptador en este ejemplo no es importante, más importante entender que es necesario utilizar AsyncTask para mostrar un diálogo para el progreso.

private class PrepareAdapter1 extends AsyncTask<Void,Void,ContactsListCursorAdapter > { 
    ProgressDialog dialog; 
    @Override 
    protected void onPreExecute() { 
     dialog = new ProgressDialog(viewContacts.this); 
     dialog.setMessage(getString(R.string.please_wait_while_loading)); 
     dialog.setIndeterminate(true); 
     dialog.setCancelable(false); 
     dialog.show(); 
    } 
    /* (non-Javadoc) 
    * @see android.os.AsyncTask#doInBackground(Params[]) 
    */ 
    @Override 
    protected ContactsListCursorAdapter doInBackground(Void... params) { 
     cur1 = objItem.getContacts(); 
     startManagingCursor(cur1); 

     adapter1 = new ContactsListCursorAdapter (viewContacts.this, 
       R.layout.contact_for_listitem, cur1, new String[] {}, new int[] {}); 

     return adapter1; 
    } 

    protected void onPostExecute(ContactsListCursorAdapter result) { 
     list.setAdapter(result); 
     dialog.dismiss(); 
    } 
} 
+0

de Operaciones, o yo no se expl en mí mismo correctamente, o no estoy seguro de entender tu respuesta. No quiero mostrar un cuadro de diálogo, sino una vista de texto, como se muestra en Android Market como ejemplo. También Twitter o Facebook usan el mismo TextView. ¿Lo has visto con la pantalla con la carga ... vista de texto centrada en ella ?. Gracias por la respuesta, aunque – ggomeze

+0

Lo siento, este dios me confundió 'Esta es una pantalla de fondo blanco con una rueda giratoria animada y un" Cargando ... "' – Pentium10

3

No sé si será adapta completamente a sus necesidades, de forma sencilla apenas se fija el texto carga inicialmente para android-vacío-id-vista como la

<TextView 
     android:id="@android:id/empty" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="1" 
     android:gravity="center" 
     android:text="Loading... Please Wait" 
     android:textSize="20dip" /> 

y si no hay elementos lista que se encuentran a continuación, establezca android-vacío-id-vista a diferentes mensajes de devolución de llamada asincrónica

((TextView) findViewById(android.R.id.empty)).setText("Your List is empty"); 

dará indicación suficiente para el usuario de que algo está lista progressing..ie está cargando

Cuestiones relacionadas