android - 聊天 RecyclerView 为空白,仅显示正在获取数据
问题描述
我正在尝试以聊天形式显示 Recyclerview,但它是空白的,这里找不到问题是代码,我不知道问题出在哪里,但它可能在适配器中。
MessageListAdapter.java
public class MessageListAdapter extends RecyclerView.Adapter {
private static final int VIEW_TYPE_MESSAGE_SENT = 1;
private static final int VIEW_TYPE_MESSAGE_RECEIVED = 2;
private Context mContext;
private List<ItemMessage> mMessageList;
public MessageListAdapter(Context context, List<ItemMessage> messageList) {
mContext = context;
mMessageList = messageList;
}
@Override
public int getItemCount() {
return mMessageList.size();
}
// Determines the appropriate ViewType according to the sender of the message.
@Override
public int getItemViewType(int position) {
ItemMessage message = mMessageList.get(position);
if (message.getSender().equals(FirebaseAuth.getInstance().getCurrentUser().getUid())) {
// If the current user is the sender of the message
return VIEW_TYPE_MESSAGE_SENT;
} else {
// If some other user sent the message
return VIEW_TYPE_MESSAGE_RECEIVED;
}
}
// Inflates the appropriate layout according to the ViewType.
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
if (viewType == VIEW_TYPE_MESSAGE_SENT) {
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_message_sent, parent, false);
return new SentMessageHolder(view);
} else if (viewType == VIEW_TYPE_MESSAGE_RECEIVED) {
view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_message_received, parent, false);
return new ReceivedMessageHolder(view);
}
return null;
}
// Passes the message object to a ViewHolder so that the contents can be bound to UI.
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
ItemMessage message = mMessageList.get(position);
switch (holder.getItemViewType()) {
case VIEW_TYPE_MESSAGE_SENT:
((SentMessageHolder) holder).bind(message);
break;
case VIEW_TYPE_MESSAGE_RECEIVED:
((ReceivedMessageHolder) holder).bind(message);
}
}
private class SentMessageHolder extends RecyclerView.ViewHolder {
TextView messageText, timeText;
SentMessageHolder(View itemView) {
super(itemView);
messageText = (TextView) itemView.findViewById(R.id.text_message_body);
timeText = (TextView) itemView.findViewById(R.id.text_message_time);
}
void bind(ItemMessage message) {
messageText.setText(message.getMessgae());
// Format the stored timestamp into a readable String using method.
timeText.setText(message.getTime());
}
}
private class ReceivedMessageHolder extends RecyclerView.ViewHolder {
TextView messageText, timeText, nameText;
ImageView profileImage;
ReceivedMessageHolder(View itemView) {
super(itemView);
messageText = (TextView) itemView.findViewById(R.id.text_message_body);
timeText = (TextView) itemView.findViewById(R.id.text_message_time);
nameText = (TextView) itemView.findViewById(R.id.text_message_name);
profileImage = (ImageView) itemView.findViewById(R.id.image_message_profile);
}
void bind(ItemMessage message) {
messageText.setText(message.getMessgae());
// Format the stored timestamp into a readable String using method.
timeText.setText(message.getTime());
nameText.setText("kdkdk");
// Insert the profile image from the URL into the ImageView.
// Utils.displayRoundImageFromUrl(mContext, message.getSender().getProfileUrl(), profileImage);
}
}
}
ItemMessage.java
public class ItemMessage {
private String sender = null;
private String reciever = null;
private String time = null;
private String messgae = null;
public ItemMessage() {
}
public ItemMessage(String sender, String reciever, String time, String messgae) {
this.sender = sender;
this.reciever = reciever;
this.time = time;
this.messgae = messgae;
}
public String getSender() {
return sender;
}
public void setSender(String sender) {
this.sender = sender;
}
public String getReciever() {
return reciever;
}
public void setReciever(String reciever) {
this.reciever = reciever;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getMessgae() {
return messgae;
}
public void setMessgae(String messgae) {
this.messgae = messgae;
}
}
获取代码。
childEventListener = new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
ItemMessage itemMessage = dataSnapshot.getValue(ItemMessage.class);
friendlyMessages.add(itemMessage);
mMessageAdapter.notifyDataSetChanged();
Log.d("SSSSz" , friendlyMessages.size()+"");
Log.d("SSSSz", itemMessage.getMessgae());
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
databaseReferencemsg.addChildEventListener(childEventListener);
我没有发布其余代码,因为我知道问题就在这里。
解决方案
推荐阅读
- scala - 在 Spark Catalyst 代码生成期间,具有转义字段名称的 Scala 案例类引发错误
- javascript - 如何在 Lodash Get 中使用泛型类型?
- flow-project - 在路线中添加公交车站?(流,相扑)
- javascript - 反应图像源在文件夹中不起作用
- sql - 在 SSIS 中出现 DataType 错误 - 包失败
- swift - 是否可以手动添加 crashlytics 框架并且它可以工作
- python-2.7 - 我应该如何格式化我的收益请求?
- android - 当我使用显示尺寸进行可访问性时,有没有办法避免增加图像尺寸?
- regex - 正则表达式 - 即使被填充文本包围也匹配模式
- flutter - 调试 Flutter 应用程序的方法有哪些?