在适配器中膨胀不同的布局

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 是灰色的。