我正在使用Firebase开发一个消息传递应用。我希望在讨论时以不同的方式显示消息 我将它放在DB中的“Messages”节点上。
messageMap.put("from", mCurrentUserPhone);
这是我的适配器中的 onBindViewHolder 方法。
public void onBindViewHolder(@NonNull MessageViewHolder holder, int position) {
mAuth = FirebaseAuth.getInstance();
String user_phone = mAuth.getCurrentUser().getPhoneNumber();
Messages message = mMessagesList.get(position);
String from_user = message.getFrom();
if(from_user.equals(user_phone)){
isLoaded = true;
holder.messageText.setBackgroundResource(R.drawable.message_text_background_for_me);
}else{
isLoaded = false;
holder.messageText.setBackgroundResource(R.drawable.message_text_background);
}
holder.messageText.setText(message.getMessage());
}
这是 onCreateViewHolder 方法
public MessageViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view;
if (isLoaded){
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_main_layout_for_me, parent, false);
return new MessageViewHolder(view);
}else{
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_main_layout, parent, false);
return new MessageViewHolder(view);
}
}
白色背景是指来自我的信息,而灰色背景是来自其他用户 我做错了什么?
答案 0 :(得分:0)
您应该覆盖getItemViewType
方法。在那里,您将根据您的字段返回不同的int。像这样:
@Override
public int getItemViewType(int position) {
return messages[position].phone == user_phone ? 0 : 1;
}
然后在onCreateViewHolder
中,您将通过itemViewType
参数决定。如果它为零,则为白色;如果1是灰色的。