FirebaseListAdapter verschiebt einzelne Elemente für die Chat-App nicht – Firebase-Ui 3.1

Ich mache eine Chat-App auf Android, die Google Firebase verwendet, um Nachrichten zu speichern, die Benutzer miteinander schreiben. Um diese Nachrichten den Benutzern anzuzeigen, lese ich sie aus der database und organisiere sie in einem benutzerdefinierten ListView mit einem ListAdapter. Das funktionierte gut, bis ich meine Abhängigkeiten, speziell Firebase ui, aktualisiert habe:

com.firebaseui:firebase-ui:3.1.0 

Jetzt funktioniert der Code zum Erstellen des Listenadapters nicht, nämlich:

 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())); } }; 

Um dieses Problem zu beheben, habe ich den Code so aktualisiert, dass er den neuen Anforderungen von Firebase ui entspricht.

 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())); } }; 

Dieser Code wird jetzt kompiliert, aber die Listenansicht zeigt die Daten nicht an. Gibt es einen bestimmten richtigen Weg, um die neue Firebase-Abhängigkeit zu verwenden, um den Listenadapter zu erstellen?

   

So lassen FirebaseRecyclerAdapter und FirebaseListAdapter die Daten zur Aktivität anzeigen

Sie müssen dies verwenden:

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

Da FirebaseListAdapter einen Listener verwendet, um nach Änderungen in der Firebase-database zu adapter.startListening() müssen Sie adapter.startListening() innerhalb von onStart() hinzufügen, um die Daten in der Listview anzeigen zu können.

Anschließend können Sie innerhalb von onStop() (wenn die Aktivität gestoppt wird) adapter.stopListening() , um den Listener und die Daten im Adapter zu entfernen.

Überprüfen Sie dies für weitere Informationen: Adapter LifeCycle

Hinweis:

Wenn Sie nach der Verwendung des oben genannten nullpointexception eine nullpointexception oder cannot resolve symbol , müssen Sie den adapter als globale Variable deklarieren und überprüfen Sie die folgende Antwort: Fehler in startListening ()