0
特定のfirebaseデータベース参照のリスナーを登録しました。データが変更されると、トーストメッセージが表示され、チャットメッセージがリストに追加され、リサイクルビューにそのアイテムが表示されます。ただし、トーストメッセージのみが表示されますが、アイテムはリサイクルビューに追加されません。私はそれがRecycleViewアダプターの問題によって引き起こされたと信じていますが、私は場所を特定することができません。Firebase RecycleViewアダプタがnotifyDataSetChanged()の後でも更新されない
public void getMessageByMessageUUID(final MessageAdapter messageAdapter, final String chatUUID, final String messageUUID) {
MESSAGE_REFERENCE.child(chatUUID).child(messageUUID).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
ChatMessage message = dataSnapshot.getValue(ChatMessage.class);
Toast.makeText(getApplicationContext(),
"Welcome " + chatUUID + " " + message.getMessageText(),
Toast.LENGTH_LONG)
.show();
messageAdapter.addMessage(message);
messageAdapter.notifyDataSetChanged();
}
アダプタクラス
private ArrayList<ChatMessage> messages = new ArrayList<ChatMessage>();
protected Context context;
public MessageAdapter(final String chatUUID, DatabaseReference databaseReference) {
databaseReference.addChildEventListener(new ChildEventListener()...);
}
public void addMessage(ChatMessage chatMessage) {
messages.add(chatMessage);
notifyDataSetChanged();
}
@Override
public MessageHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
MessageHolder viewHolder = null;
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.messages, parent, false);
viewHolder = new MessageHolder(layoutView, messages);
return viewHolder;
}
@Override
public void onBindViewHolder(MessageHolder holder, int position) {
holder.messageImage.setImageResource(R.drawable.user_pacific);
holder.messageText.setText(messages.get(position).getMessageText());
}
@Override
public int getItemCount() {
return this.messages.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}