¿Cómo descartar una barra de progreso incluso si no hay una vista para completar en FirebaseListAdapter?

Yo uso FirebaseUI FirebaseListAdapter. Lleva algo de tiempo cargar los datos y quiero mostrar un círculo giratorio. Puedo descartar la barra de progreso estableciendo la visibilidad de la vista como invisible en el populateView, pero no funciona si no hay una vista para completar. ¿Cómo manejar esto?

Actualización : los adaptadores FirebaseUI hoy en día tienen un método onDataChanged() que puede anular para detectar cuando terminan de cargar un conjunto de datos.

Ver el código fuente en github . Desde allí:

Este método se activará cada vez que las actualizaciones de la base de datos se hayan procesado por completo. Por lo tanto, la primera vez que se llama a este método, se cargan los datos iniciales, incluido el caso cuando no hay datos disponibles. Cada vez que se llama al método, se ha completado una actualización completa (que posiblemente consiste en actualizaciones de varios elementos secundarios).

Normalmente, anularía este método para ocultar un indicador de carga (después de la carga inicial) o para completar una actualización por lotes a un elemento de IU.

La aplicación de ejemplo FirebaseUI anula onDataChanged() para ocultar su indicador de “carga”:

 public void onDataChanged() { // If there are no chat messages, show a view that invites the user to add a message. mEmptyListMessage.setVisibility(getItemCount() == 0 ? View.VISIBLE : View.GONE); } 

Respuesta original

Los adaptadores de la lista FirebaseUI usan internamente Firebase ChildEventListener . Este oyente solo se activa para eventos secundarios relevantes. Si no hay niños, ningún evento se disparará.

Puede detectar esta situación adjuntando un escucha de valor adicional a la referencia / consulta que pasa al adaptador.

 DatabaseReference list = mDatabase.child("messages"); showSpinner(); mAdapter = new FirebaseListAdapter(......, list) { void populateView(View view, Message message, int position) { // the first message was loaded hideSpinner(); } }); list.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // the initial data is loaded (even if there was none) hideSpinner(); } @Override public void onCancelled(DatabaseError databaseError) { Log.w(TAG, "onCancelled", databaseError.toException()); } });