0

I'm developing a messaging app using Firebase. I want the messages to be displayed differently when discussing.
I put this to my "Messages" node in DB.

messageMap.put("from", mCurrentUserPhone);

That is the onBindViewHolder method in my adapter.

  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());

}

Here is the onCreateViewHolder method

 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);
    }
}

Here is the result that I have from my phone.enter image description here

White background is when messages comes from me and gray background is for the other user.
What have I done wrong please?

Panther007
  • 255
  • 3
  • 9

1 Answers1

2

You should override getItemViewType method. In there, you return different int based on your fields. Something like this:

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

Then in onCreateViewHolder you will decide by itemViewType argument. If it's zero, it is white; if 1 it is grey.

Majkeee
  • 960
  • 1
  • 8
  • 28