как раздувать разные макеты в адаптере Firebase Recycler

#firebase-realtime-database #android-recyclerview #chat #layout-inflater

#firebase-база данных в реальном времени #android-recyclerview #Чат #макет-надуватель

Вопрос:

У меня есть активность в чате, и я пытаюсь раздуть разные макеты для отправителя и получателя. пока я могу извлекать данные для базы данных firebase в реальном времени, но отправитель и получатель имеют одинаковый макет, я создал макет второго макета и попробовал, viewType но не могу понять, как назначить текущего пользователя макету cretin, пожалуйста, помогите: (

активность в чате

 if (!employee)
    {



   FirebaseRecyclerOptions options = new FirebaseRecyclerOptions.Builder<ChatMessageModel>()
                .setQuery(FirebaseDatabase.getInstance().getReference().child("client_emp_messages")
                        .child(formattedDate uid), ChatMessageModel.class)
                .build();

    }

    else
    {
        // employee
        Bundle bundle = getIntent().getExtras();
        String d = bundle.getString("path_to_client_realtime_db");


        options = new FirebaseRecyclerOptions.Builder<ChatMessageModel>()
                .setQuery(FirebaseDatabase.getInstance().getReference().child("client_emp_messages")
                        .child(d), ChatMessageModel.class)
                .build();


    }

    adapter = new ChatAdapter(options);
    nMessageList.setAdapter(adapter);
  

адаптер чата

     public class ChatAdapter extends FirebaseRecyclerAdapter<ChatMessageModel, ChatAdapter.ChatViewHolder>
    {
 

   public ChatAdapter(@NonNull FirebaseRecyclerOptions<ChatMessageModel> options) {
        super(options);
    }

    @Override
    protected void onBindViewHolder(@NonNull ChatViewHolder holder, int i, @NonNull ChatMessageModel model) {
            holder.nMessage_text_view.setText(model.getMessage());
    }

    @NonNull
    @Override
    public ChatViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {


            View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.message_single_layout, parent, false);
            return new ChatViewHolder(view);


    }

    class ChatViewHolder extends RecyclerView.ViewHolder
    {
        TextView  nMessage_text_view;

        public ChatViewHolder(@NonNull View itemView) {
            super(itemView);

            nMessage_text_view = itemView.findViewById(R.id.message_text_view);

        }
    }
}
  

Ответ №1:

Я предлагаю вам создать один макет. например, отправитель с правой стороны и получатель с левой стороны. вы можете использовать его с помощью линейной компоновки или относительной компоновки. и установите их видимость невидимой. Итак, загрузите данные сообщения из базы данных и проверьте их по идентификатору пользователя. Если данные совпадают с текущим токеном пользователя, отобразите его в правом столбце и установите видимость видимой и наоборот.

Для этого вам просто нужно сохранить токен пользователя с сообщением в базе данных.

Надеюсь, вы это понимаете. Спасибо

Комментарии:

1. Я пытаюсь использовать эту идею с идентификатором пользователя, но я не думаю, что знаю, как это сделать правильно, потому что весь чат получает 1layout либо отправителя, либо получателя: (