Как обновить RecyclerView в android только при получении новых данных из Firebase? - PullRequest
0 голосов
/ 14 апреля 2020

Каждый раз при отправке или получении нового чата мерцает все окно. Нужна помощь, чтобы остановить это и добавить только новые чаты в представление Recycler

Я пытался использовать notifyDataSetChanged (), но он выдает ошибку.

 private void fetch_All_Chats(DataSnapshot dataSnapshot) {

        FirebaseRecyclerOptions options=new FirebaseRecyclerOptions.Builder<GetChats>()
                .setQuery(dataSnapshot.child("Chats").child(receiverUID).getRef(),GetChats.class)
                .build();


        adapter=new FirebaseRecyclerAdapter<GetChats, ChatViewHolder>(options) {

            @Override
            protected void onBindViewHolder(@NonNull ChatViewHolder holder, int position, @NonNull GetChats model) {

                String from=model.getFrom();

                if(from.equals("sender"))
                {
                    holder.receiver.setVisibility(View.INVISIBLE);
                    holder.sender.setVisibility(View.VISIBLE);
                    holder.sendmessageBody.setText(model.getMessageBody());
                    holder.sendMessagetime.setText(model.getTime());
                }
                else
                {
                    holder.sender.setVisibility(View.INVISIBLE);
                    holder.receiver.setVisibility(View.VISIBLE);
                    holder.receiverMessageBody.setText(model.getMessageBody());
                    holder.receiverMessageTime.setText(model.getTime());
                }

            }

            @NonNull
            @Override
            public ChatViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

                View v=LayoutInflater.from(ChatScreenActivity.this).inflate(R.layout.chat_screen_layout_design,parent,false);
                return new ChatViewHolder(v);
            }

        };

        recyclerView.setAdapter(adapter);

        adapter.registerAdapterDataObserver(new RecyclerView.AdapterDataObserver() {
            @Override
            public void onItemRangeInserted(int positionStart, int itemCount) {
                super.onItemRangeInserted(positionStart, itemCount);

                recyclerView.scrollToPosition(positionStart);

            }
        });



        if(adapter!=null)
        {
            adapter.startListening();
        }





    }

, и это класс ChatHolder:


public class ChatViewHolder extends RecyclerView.ViewHolder{

        TextView sendmessageBody,sendMessagetime,receiverMessageBody,receiverMessageTime;
        LinearLayout sender,receiver;
        public ChatViewHolder(@NonNull View itemView) {
            super(itemView);

            receiverMessageBody=itemView.findViewById(R.id.message_body_received);
            receiverMessageTime=itemView.findViewById(R.id.received_message_time);
            sendmessageBody=itemView.findViewById(R.id.message_body_sent);
            sendMessagetime=itemView.findViewById(R.id.sent_message_time);

            sender=itemView.findViewById(R.id.sendChatScreen);
            receiver=itemView.findViewById(R.id.receivedChatScreen);
        }
    }

Я пробовал много методов, но ни один из них работают. Мне нужно немного помочь в этом. Заранее спасибо.

...