Элементы RecyclerView не меняются
я создаю активность в виде чата с помощью RecyclerView. Сообщения от другого пользователя должны отображаться слева, а сообщения от текущего пользователя - справа. Для этого я сделал две разметки для обоих типов: Разметка для "левого" сообщения:
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="280dp"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_margin="6dp">
<!--разметка-->
</androidx.cardview.widget.CardView>
Разметка для "правого" сообщения:
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="280dp"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_margin="6dp"
android:layout_gravity="right">
<!--разметка-->
</androidx.cardview.widget.CardView>
Отличие здесь только в layout_gravity.
Код моего адаптера:
public class MessageAdapter extends RecyclerView.Adapter<MessageAdapter.ViewHolder> {
List<Message> list;
private final LayoutInflater inflater;
final int MY_MESSAGE = 0;
final int OWN_MESSAGE = 1;
public MessageAdapter(Context applicationContext, List<Message> messages) {
this.inflater = LayoutInflater.from(applicationContext);
this.list = messages;
}
@Override
public int getItemViewType(int position) {
if(list.get(position).my)
return MY_MESSAGE;
else
return OWN_MESSAGE;
}
@NonNull
@Override
public MessageAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
if(viewType == MY_MESSAGE)
return new ViewHolder.MyMessageViewHolder(FragmentMyMessageBinding.inflate(LayoutInflater.from(parent.getContext()),
parent, false).getRoot());
else
return new ViewHolder.OwnMessageViewHolder(FragmentMessageBinding.inflate(LayoutInflater.from(parent.getContext()),
parent, false).getRoot());
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.bind(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
static class ViewHolder extends RecyclerView.ViewHolder{
public ViewHolder(@NonNull View itemView) {
super(itemView);
}
public void bind(Message message){
}
static class MyMessageViewHolder extends ViewHolder{
private final FragmentMyMessageBinding binding;
public String text;
public String name;
public String date;
public MyMessageViewHolder(@NonNull View itemView) {
super(itemView);
binding = FragmentMyMessageBinding.bind(itemView);
}
public void bind(Message message){
text = message.text;
name = message.username;
date = message.date;
binding.text.setText(text);
binding.name.setText(name);
binding.date.setText(date);
}
}
static class OwnMessageViewHolder extends ViewHolder{
private final FragmentMessageBinding binding;
public String text;
public String name;
public String date;
public OwnMessageViewHolder(@NonNull View itemView) {
super(itemView);
binding = FragmentMessageBinding.bind(itemView);
}
public void bind(Message message){
text = message.text;
name = message.username;
date = message.date;
binding.text.setText(text);
binding.name.setText(name);
binding.date.setText(date);
}
}
}
Для двух типов сообщений я создал два класса, наследующихся от базового ViewHolder.
Проблема: все сообщения все равно выводятся именно слева, хотя android studio в режиме "split" показывает разметку для "правого" сообщения именно в правой части экрана. В чем моя ошибка?