notificaciones android listview firebase progressdialog firebaseui

android - ¿Cómo recibir notificaciones cuando termine FirebaseListAdapter?



firebase cloud messaging (2)

Firebase se basa en la premisa de sincronizar datos. Por esta razón, nunca hay realmente un momento en el que se sincronice.

El conjunto inicial de datos para una ubicación se descarga de una vez y da como resultado una llamada a onChildAdded() para cada hijo, seguido de un solo onDataChanged() . Si desea ocultar la barra de progreso cuando se cargó esta información inicial, puede registrar un ValueEventListener para un solo evento:

ref.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { // the initial data has been loaded, hide the progress bar } @Override public void onCancelled(DatabaseError firebaseError) { } });

En el fragmento de arriba, todos los niños ya se habrán agregado a tu ListView . Dependiendo de su caso de uso, este puede ser el momento adecuado para ocultar la barra de progreso o puede ser posterior a lo deseado.

Si desea saber cuándo se han procesado los primeros datos, puede registrar un observador con su adaptador:

adapter.registerDataSetObserver(new DataSetObserver() { @Override public void onChanged() { super.onChanged(); // the first time you get here, hide the progress bar } @Override public void onInvalidated() { super.onInvalidated(); } });

Puede usar este enfoque para ocultar la barra de progreso tan pronto como lleguen los primeros datos de Firebase.

Estoy usando FirebaseListAdapter y necesito mostrar un ProgressDialog, pero no sé cómo saber cuándo termina de cargarse.

public class TabFragment1 extends ListFragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.tab_fragment_1, container, false); ListView eventosView = (ListView) rootView.findViewById(android.R.id.list); Firebase ref = new Firebase(//myappurl); Firebase usersRef = new Firebase(//myappurl/eventos/users); Singleton singletonUser = Singleton.getInstance(); setUser(singletonUser); Firebase ref = new Firebase(//myappurl/eventos); FirebaseListAdapter<Evento> mAdapter = new FirebaseListAdapter<Evento>(getActivity(), Evento.class, R.layout.event_row, ref) { @Override protected void populateView(View view, Evento evento) { ((TextView)view.findViewById(R.id.eventTitle)).setText(evento.getNome()); ((TextView)view.findViewById(R.id.eventPlace)).setText(evento.getLocal()); } }; setListAdapter(mAdapter); return mAdapter; return rootView; } private void setUser(Singleton singletonUser){ singletonUser.getToken(); singletonUser.setUuid(); singletonUser.getUuid(); } }

¿Cuándo puedo colocar el ProgressDialog.dismiss ()?


Desde enero de 2017, FirebaseListAdapter tiene el siguiente método que puede anularse (commit por Frank en github):

/** * This method will be triggered each time updates from the database have been completely processed. * So the first time this method is called, the initial data has been loaded - including the case * when no data at all is available. Each next time the method is called, a complete update (potentially * consisting of updates to multiple child items) has been completed. * <p> * You would typically override this method to hide a loading indicator (after the initial load) or * to complete a batch update to a UI element. */ protected void onDataChanged() { }