Раздувать разные макеты в адаптере - PullRequest
0 голосов
/ 03 июня 2018

Я разрабатываю приложение для обмена сообщениями с использованием Firebase.Я хочу, чтобы при обсуждении сообщения отображались по-разному.
Я поместил это в свой узел «Сообщения» в БД.

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 голосов
/ 03 июня 2018

Вы должны переопределить getItemViewType метод.Там вы возвращаете различные int в зависимости от ваших полей.Примерно так:

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

Тогда в onCreateViewHolder вы определите аргумент itemViewType.Если это ноль, это белый;если 1 - серый.

...