Я разрабатываю интерфейс чата. Когда я отправляю сообщение, оно раздувается правильно. Однако, когда я отправляю другое сообщение, новое сообщение добавляется вверху нового экрана, а не под предыдущим сообщением.
Кроме того, когда я получаю ответ, он добавляется ниже того, который я отправил. После этого следующее полученное или отправленное сообщение будет добавлено на новый экран. Как я могу предотвратить это?
Вот мой файл layout.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="8dp">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/message_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/textbox"
/>
<LinearLayout
android:id="@+id/textbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<EditText
android:id="@+id/txtMessage"
android:hint="Enter message"
android:background="@android:color/transparent"
android:layout_gravity="center"
android:layout_marginLeft="16dp"
android:layout_marginRight="16dp"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:maxLines="6"/>
<Button
android:id="@+id/btnSend"
android:text="SEND"
android:textSize="14dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:layout_width="64dp"
android:layout_height="48dp"
android:gravity="center"
android:layout_gravity="bottom" />
</LinearLayout>
</RelativeLayout>
Добавление нового сообщения в адаптер:
String messageString = txtMessage.getText().toString();
if (messageString.trim().length() > 0) {
// update the views
txtMessage.setText("");
Message message = new Message(messageString);
message.setDirection(Message.OUTGOING_MESSAGE);
adapter.addMessage(message);
Класс адаптера чата:
class ChatAdapter
extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
Context context;
private final List<Message> messages;
ChatAdapter(Context context, List<Message> messages) {
this.context = context;
this.messages = messages;
}
public void addMessage(Message message) {
messages.add(message);
Log.i("MESSAGE", message.getText());
adapter.notifyDataSetChanged();
}