FirebaseListAdapter no empuja los elementos individuales para la aplicación de chat – Firebase-Ui 3.1

Estoy creando una aplicación de chat en Android que usa la base de datos de Google para almacenar mensajes que los usuarios se escriben. Para mostrar estos mensajes a los usuarios, los leo de la base de datos y los organizo en un ListView personalizado con un ListAdapter. Esto funcionaba bien hasta que actualicé mis dependencias, específicamente firebase ui para:

com.firebaseui:firebase-ui:3.1.0 

Ahora el código para construir el adaptador de lista no funciona, siendo:

 adapter = new FirebaseListAdapter(FirebaseDatabase.getInstance().getReference("Lobbies").child(leaderID).child("Messages"), ChatMessage.class, R.layout.message, this) { @Override protected void populateView(View v, ChatMessage model, int position) { // Get references to the views of message.xml TextView messageText = (TextView)v.findViewById(R.id.message_text); TextView messageUser = (TextView)v.findViewById(R.id.message_user); TextView messageTime = (TextView)v.findViewById(R.id.message_time); // Set their text messageText.setText(model.getMessageText()); messageUser.setText(model.getMessageUser()); // Format the date before showing it messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", model.getMessageTime())); } }; 

Para solucionar este problema, actualicé el código para cumplir con los nuevos requisitos de la interfaz de usuario de Firebase, haciendo que el código se convierta en:

 FirebaseListOptions options = new FirebaseListOptions.Builder() .setQuery(FirebaseDatabase.getInstance().getReference("Lobbies").child(leaderID).child("Messages"), ChatMessage.class).setLayout(R.layout.message).build(); adapter = new FirebaseListAdapter(options) { @Override protected void populateView(View v, ChatMessage model, int position) { // Get references to the views of message.xml TextView messageText = v.findViewById(R.id.message_text); TextView messageUser = v.findViewById(R.id.message_user); TextView messageTime = v.findViewById(R.id.message_time); // Set their text messageText.setText(model.getMessageText()); messageUser.setText(model.getMessageUser()); // Format the date before showing it messageTime.setText(DateFormat.format("dd-MM-yyyy (HH:mm:ss)", model.getMessageTime())); } }; 

Este código comstack bien ahora, pero la vista de lista no muestra los datos. ¿Existe una forma correcta y específica de usar la nueva dependencia de firebase ui para hacer el adaptador de lista?

Para permitir que FirebaseRecyclerAdapter y FirebaseListAdapter muestren los datos de la actividad

Necesitas usar esto:

 @Override protected void onStart() { super.onStart(); adapter.startListening(); } @Override protected void onStop() { super.onStop(); adapter.stopListening(); } 

Dado que FirebaseListAdapter usa un oyente para verificar los cambios en la base de datos de firebase, para escuchar los datos debe agregar adapter.startListening() dentro de onStart() para poder mostrar los datos en la vista de lista.

Luego, dentro de onStop() (cuando la actividad está detenida), puede usar adapter.stopListening() para eliminar el oyente y los datos en el adaptador.

Verifique esto para obtener más información: Adaptador LifeCycle

Nota:

Si después de usar lo anterior, obtiene una nullpointexception o cannot resolve symbol , debe declarar el adapter como variable global y verifique la respuesta siguiente: Error en startListening ()