onChildДобавлено в FirebaseRecyclerAdapter - PullRequest
0 голосов
/ 19 ноября 2018

mMessages - это метод. У меня есть таблица SQLite, и каждый раз, когда приходит новое сообщение, я хочу добавить +1 к столбцу. Это то, что делает метод mMessages(), но вместо добавления +1 каждый раз, когда добавляется новый дочерний элемент, он добавляет все существующие дочерние элементы каждый раз, когда я открываю упражнение.

Скажем, поддержка в таблице, значение равно 10, и у меня есть 5 детей в RecyclerView, и я открываю его, и еще до того, как я получу нового ребенка, в таблицу добавляется +5, потому что есть 5 существующих детей ,

Я не хочу, чтобы это произошло, но я хочу, чтобы +1 добавлялся только при добавлении нового дочернего элемента. Как мне этого добиться?

@Override
protected void onBindViewHolder(@NonNull final Chat.MessagesViewHolder holder, final int position, @NonNull final MessagesHelper model) {
    holder.setMessage(model.getMessage());

    final String userId = getRef(position).getKey();
    final DatabaseReference mTimeReference = FirebaseDatabase.getInstance().getReference().child("Messages").child(MessageSenderId).child(MessageRecieverId);
    Query messageQuery = mTimeReference.limitToLast(10);
    messageQuery.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            MessagesHelper message = dataSnapshot.getValue(MessagesHelper.class);

            mMessages();

        }


        @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) {
        }
    });

1 Ответ

0 голосов
/ 20 ноября 2018

Firebase выполняет так называемую синхронизацию состояний: он синхронизирует данные того, что вы слушаете.Чтобы получать только новые данные, вам нужно прослушивать только новые данные.

Один из способов сделать это - указать временную метку и каждый элемент и запросить элементы с временной меткой после времени, в которое вы прикрепляете слушателей.

Другой способ - ограничить толькопоследний элемент.

Но оба также влияют на отображаемые сообщения.

См. также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...