#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 либо отправителя, либо получателя: (