Я создаю приложение чата с использованием базы данных Firebase Realtime. Я хочу реализовать такие функции, как WhatsApp, где пользователь может отправлять сообщение без Интернета (Добавить объект сообщения на RecyclerView), но будет иметь значок часов (Чтобы показать, что сообщение еще не было отправлено).Обновить элемент recyclerview ui в клиенте, чтобы указать, что база данных Firebase на сервере обновлена
Когда база данных Firebase получает сообщение (Абонентское устройство подключается к Интернету и Firebase посылает сообщение), я хочу, чтобы обновить добавленный элемент на recyclerview (изменить значок часов для положительного значок) ,
Что я пробовал? У меня есть, что
mFirebaseDatabaseReference = FirebaseDatabase.getInstance().getReference();
mFirebaseAdapter = new ChatFirebaseAdapter(mFirebaseDatabaseReference.child("chat_id"), user.getId());
recyclerChat.setLayoutManager(mLinearLayoutManager);
recyclerChat.setAdapter(mFirebaseAdapter);
Мой адаптер расширяет FirebaseRecyclerAdapter от firebase-ui-database
Я пытался добавить addChildEventListener
на моем DatabaseReference
где я получаю dataSnapshot
нового элемента, но я не знаю, как получить право позицию по рециклированию.
mFirebaseDatabaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
UPDATE RECYCLERVIEW ITEM
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Я добавил onCompletionListener
, когда я добавить новое сообщение, но я не знаю, как получить правильную позицию снова.
mFirebaseDatabaseReference.push().setValue(message, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError == null) {
UPDATE RECYCLERVIEW ITEM
}
}
});
У кого-то есть идея, почему я не могу это сделать? Благодарю. Я много искал, прежде чем спросил, но я не нашел правильного ответа.
Привет, Нишан, спасибо за ответ. Действительно, я использую этот учебник. Но не показывайте, как я могу проверить, получил ли сервер сообщение (я получаю это с помощью слушателя), и как получить позицию из переработанного представления, чтобы обновить значок. –
. Идентификаторы push помогут вам исправить ребенка. Посмотрите на редактирование. –
Да Nishant, я получаю идентификаторы добавленного ребенка. Как я могу использовать это для обновления recyclerView. Каково отношение генерации и позиции элемента в просмотре ресайклеров. Если бы вы могли сказать мне, что я добьюсь своей цели. –