在适配器中膨胀不同的布局
Inflate different layouts in adapter
我正在使用 Firebase 开发消息传递应用程序。我希望消息在讨论时以不同的方式显示。
我把它放到数据库中的 "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);
}
}
这是我 phone.
的结果
白色背景是我发来的消息,灰色背景是其他用户的消息。
请问我做错了什么?
您应该覆盖 getItemViewType
方法。在那里,你 return 不同的 int 基于你的字段。像这样:
@Override
public int getItemViewType(int position) {
return messages[position].phone == user_phone ? 0 : 1;
}
然后在 onCreateViewHolder
中你将通过 itemViewType
参数来决定。如果为零,则为白色;如果 1 是灰色的。
我正在使用 Firebase 开发消息传递应用程序。我希望消息在讨论时以不同的方式显示。
我把它放到数据库中的 "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);
}
}
这是我 phone.
白色背景是我发来的消息,灰色背景是其他用户的消息。
请问我做错了什么?
您应该覆盖 getItemViewType
方法。在那里,你 return 不同的 int 基于你的字段。像这样:
@Override
public int getItemViewType(int position) {
return messages[position].phone == user_phone ? 0 : 1;
}
然后在 onCreateViewHolder
中你将通过 itemViewType
参数来决定。如果为零,则为白色;如果 1 是灰色的。