在适配器

时间:2018-06-03 14:59:13

标签: android view adapter

我正在使用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);
    }
}

以下是我手机上的结果。enter image description here

白色背景是指来自我的信息,而灰色背景是来自其他用户 我做错了什么?

1 个答案:

答案 0 :(得分:0)

您应该覆盖getItemViewType方法。在那里,您将根据您的字段返回不同的int。像这样:

@Override
public int getItemViewType(int position) {
    return messages[position].phone == user_phone ? 0 : 1;
}

然后在onCreateViewHolder中,您将通过itemViewType参数决定。如果它为零,则为白色;如果1是灰色的。