FirestoreRecyclerAdapter не отображает вновь добавленные данные FireStore - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть собственный 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);

}

1 Ответ

0 голосов
/ 01 декабря 2018

Я решил эту проблему, создав индекс на консоли firebase для полей groupid и timestamp.По-видимому, это то, что используется для создания сложных запросов.

Вот документация по созданию индекса.https://firebase.google.com/docs/firestore/query-data/indexing

...