我正在使用android聊天应用程序。我正在使用Java和Firebase。我正在尝试将消息设置为recyclerView,但是即使消息数组中有项目也不会出现。
我已经尝试过Firebase的适配器,现在我做了自己的适配器。我创建了在创建时将可见的消息视图。 Firebase的数据库还具有所有提供的数据。
public class MainActivity extends AppCompatActivity {
private static final String TAG = "MainActivity";
private RecyclerView messageRecycler;
private ChatRecyclerAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
messageRecycler = findViewById(R.id.message_recycler);
messageRecycler.setHasFixedSize(true);
messageRecycler.setLayoutManager(new LinearLayoutManager(this));
FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference ref = database.getReference("chats");
ref.setValue("");
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
ArrayList<Message> messages = new ArrayList<>();
for (DataSnapshot ds : dataSnapshot.getChildren()) {
Message m = ds.getValue(Message.class);
messages.add(m);
}
Log.d(TAG, "onDataChange: MESS C = " + messages.size());
adapter = new ChatRecyclerAdapter(MainActivity.this, messages);
messageRecycler.setAdapter(adapter);
messageRecycler.setLayoutManager(new LinearLayoutManager(MainActivity.this));
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, "onCancelled: WQHAT?!");
}
});
Button sendButton = findViewById(R.id.send_button);
sendButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FirebaseAuth.getInstance().getCurrentUser();
EditText sendInput = findViewById(R.id.send_input);
ref.push().setValue(
new Message(sendInput.getText().toString(),
FirebaseAuth.getInstance().getCurrentUser()));
sendInput.setText("");
}
});
}
}
如果需要,还有一个适配器代码
public class ChatRecyclerAdapter extends RecyclerView.Adapter<ChatRecyclerAdapter.ChatViewHolder> {
private static final String TAG = "ChatRecyclerAdapter";
Context mContext;
ArrayList<Message> mDataSet;
public ChatRecyclerAdapter(Context context, ArrayList<Message> dataSet) {
mContext = context;
mDataSet = dataSet;
}
@NonNull
@Override
public ChatViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
Log.d(TAG, "onCreateViewHolder: CREASTEEED.");
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.message_view, parent, false);
return new ChatViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ChatViewHolder holder, int position) {
holder.bind(mDataSet.get(position));
}
@Override
public int getItemCount() {
return mDataSet.size();
}
class ChatViewHolder extends RecyclerView.ViewHolder {
ImageView profileImage;
TextView usernameText, contentText;
ChatViewHolder(@NonNull View itemView) {
super(itemView);
profileImage = itemView.findViewById(R.id.profile_image);
usernameText = itemView.findViewById(R.id.user_name_text);
contentText = itemView.findViewById(R.id.content_text);
}
void bind(Message message) {
usernameText.setText(message.getUser().getDisplayName());
contentText.setText(message.getContent());
}
}
}
[当我发送消息时,来自'onDataChange'的日志,但是没有'onCreateViewHolder'的日志。
添加消息后,需要调用adapter.notifyDataSetChanged()