Каждый раз при отправке или получении нового чата мерцает все окно. Нужна помощь, чтобы остановить это и добавить только новые чаты в представление 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);
}
}
Я пробовал много методов, но ни один из них работают. Мне нужно немного помочь в этом. Заранее спасибо.