2012-02-13 9 views
8

He creado una pantalla con Fragments, que se está completando con datos extraídos de Internet. Mientras que el código en sí funciona como se espera sin ningún problema, uno de los Fragmentos (implementado como ListFragment) muestra un indicador de progreso indeterminado dentro del fragmento, que está sesgado hacia un lado. Deseo eliminar el indicador y usar otro ProgressDialog implementado como indicador en su lugar.Ocultar el indicador "Cargando ..." al implementar un ListFragment

Haciendo un poco de investigación, he descubierto la función setListShownNoAnimation() (documentado here) en la clase ListFragment, pero los siguientes intentos no funcionó:

  • Calling setListShownNoAnimation() en onActivityCreated()
  • llamado del fragmento en la actividad del padre onCreate
  • Llamándola en el fragmento de onCreateView() (esto provocó un IllegalStateException)

¿Cómo puedo eliminar el indicador de progreso del fragmento?

+1

tryed using setListShown (true)? – Warpzit

+0

@Warpzit: a partir de lo que indica la API de Android, 'setListShown (true)' mostrará el ListView (que puede o no haberse inicializado y configurado). Además, no parece deshabilitar el indicador de carga, lo que parece hacer 'setListShownNoAnimation()'. – fayerth

+0

era solo una conjetura :) lo siento, no pude evitarlo – Warpzit

Respuesta

24

La forma correcta de hacer esto es llamar:

setListShown(true); 

cuando se necesita ProgressBar que se oculta y muestra el ListView. Llámelo cuando haya terminado de obtener los datos en segundo plano y esté listo para mostrar la lista.

+0

Eso parece ser el camino correcto, ya que si pasa el método falso, aparentemente debería mostrar un indicador de progreso de carga para el usuario, lo que es bueno. el problema es que cuando uso este método en mi ListFragment, obtengo IllegalStateException, no se puede usar con una vista de contenido personalizada. ¿Lo que da? – topwik

+0

Estás en lo correcto. Esa debería ser, en general, la forma correcta de llamarlo. Mi proyecto fue hecho un poco diferente, lo que requirió un enfoque diferente. Estoy marcando que tu respuesta es la respuesta aceptada. :) – fayerth

+2

Esto debe invocarse enActivityCreated. – nima

1

Esta solución puede no ser el mejor método para resolver esto, pero funciona muy bien:

Lo que hice primero fue hacer que el fragmento no aparece en absoluto cuando lo declaré en el archivo layout.xml:

<fragment class="com.example.MyListFragment" 
    android:id="@+id/frag_list" 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:visibility="gone" /> 

luego, después de que los datos han sido descargados y procesados, me permitiría visualizar el fragmento usando un FragmentTransaction:

FragmentManager fm = getFragmentManager(); 
Fragment frag = fm.findFragmentById(R.id.frag_list); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.show(frag); 
ft.commit(); 

Si hay una mejor manera de res A pesar de este problema, estoy abierto a sugerencias.

+0

Bueno, si la visibilidad se ha ido, debe cambiarlo programáticamente a visible, 'setVisivility (View.VISIBLE);' – Ivor

1
@Override 
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) { 
    adapter.swapCursor(cursor); 
    if(isResumed()) { 
     setListShown(true); 
    } else { 
     setListShownNoAnimation(true); 
    } 
} 

pero hay que setListShown(false) donde se establece el ListAdapter. Esto funciona bien

Cuestiones relacionadas