Android RecyclerView notifyDataSetChanged()不工作

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

我正在使用firebase for chat应用程序,我正在实现从firebase数据库获取消息并更新recycler视图

当我点击“发送”按钮时,它的行为如下

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();}