У меня есть собственный FirestoreRecyclerAdapter, и он правильно отображает все элементы, хранящиеся в настоящее время в базе данных Firestore.Однако при вводе нового элемента в базу данных адаптер не отображает вновь добавленный элемент из базы данных.Если я вернусь к экрану и снова открою окно просмотра, я смогу увидеть новые добавленные данные.Как сделать так, чтобы в окне рециркулятора отображались вновь добавленные данные Firestore?
Ожидается: новые данные отображаются в верхней части окна recylcerview. Результат: новые данные вообще не отображаются в окне просмотра заново
Проблема: Новые данные не будут отображаться в RecyclerView
CollectionReference messagesCollectionRef = db.collection(MESSAGES);
Query query = messagesCollectionRef.whereEqualTo(GROUPID, groupid).orderBy(TIMESTAMP, Query.Direction.ASCENDING);
FirestoreRecyclerOptions<MessagesResponse> options = new FirestoreRecyclerOptions.Builder<MessagesResponse>()
.setQuery(query, MessagesResponse.class)
.build();
adapter = new MessagesAdapter(options, progressBar, messagesList, userid);
adapter.startListening();
messagesList.setAdapter(adapter);
Вот мой адаптер
public class MessagesAdapter extends FirestoreRecyclerAdapter<MessagesResponse, MessagesHolder> {
private static final String USERS = "users";
private static final String IMAGE = "image";
private static final String MESSAGE = "message";
private FirebaseFirestore db;
private ProgressBar progressBar;
private RecyclerView messagesList;
private String userid;
public MessagesAdapter(@NonNull FirestoreRecyclerOptions<MessagesResponse> options, ProgressBar progressBar, RecyclerView messagesList, String userid) {
super(options);
this.progressBar = progressBar;
this.messagesList = messagesList;
this.userid = userid;
db = FirebaseFirestore.getInstance();
}
@Override
public void onDataChanged() {
messagesList.getLayoutManager().scrollToPosition(getItemCount() - 1);
notifyDataSetChanged();
}
@Override
protected void onBindViewHolder(@NonNull MessagesHolder holder, int position, @NonNull MessagesResponse model) {
progressBar.setVisibility(View.GONE);
//set user profile pic
setProfilePic(holder, model);
//image message
if(model.getType().equalsIgnoreCase(IMAGE)) {
displayImage(model.getMessage(), holder);
}
//text message
if(model.getType().equalsIgnoreCase(MESSAGE)) {
holder.message.setText(model.getMessage());
}
}
@NonNull
@Override
public MessagesHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_list_item,
parent, false);
return new MessagesHolder(v);
}