Android RecyclerView notifyDataSetChanged()不工作
我正在使用firebase for chat应用程序,我正在实现从firebase数据库获取消息并更新recycler视图 当我点击“发送”按钮时,它的行为如下Android RecyclerView notifyDataSetChanged()不工作,android,firebase,android-recyclerview,chat,Android,Firebase,Android Recyclerview,Chat,我正在使用firebase for chat应用程序,我正在实现从firebase数据库获取消息并更新recycler视图 当我点击“发送”按钮时,它的行为如下 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { final ChatModel.Comment comment = new ChatModel.Comment
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final ChatModel.Comment comment = new ChatModel.Comment();
comment.uid = uid;
comment.message = editText.getText().toString();
FirebaseDatabase.getInstance().getReference().child("chatrooms")
.child(chatroomUid).push().setValue(comment).addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
FirebaseDatabase.getInstance().getReference().child("chatrooms")
.child(chatroomUid).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
comments.clear();
for(DataSnapshot item : dataSnapshot.getChildren()) {
if(item.getKey().compareTo("users")!=0) {
comments.add(item.getValue(ChatModel.Comment.class));
}
}
adapter.notifyDataSetChanged();
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
});
}
});
private class messageRecyclerveiwAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_message, viewGroup, false);
return new MessageViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int i) {
((MessageViewHolder)viewHolder).textView.setText(comments.get(i).message);
}
@Override
public int getItemCount() {
return comments.size();
}
}
如何修复它?您需要在与setOnClickListener相同的类中创建适配器的对象: 类似这样的内容:
final MessageRecyclerViewAdapter adapter = new MessageRecyclerViewAdapter(getActivity(), messageArrayList);
然后,需要将适配器传递给用于获取消息的方法。现在,您正在适配器中调用notifyDataSetChanged()
,这是错误的。首先,您需要一个特定的方法从Firebase获取这些消息。例如:
public void getLiveChatMessages(final ArrayList<ChatMessageClass> messageArrayList, final MessageRecyclerViewAdapter adapter) {
在getLiveChatMessages方法中。在这里,您还传递了适配器,以便可以使用它。这是在获取消息的相同方法中调用notifyDataSetChanged()的方法
祝你好运
adapter.notifyDataSetChanged();}