Как я могу остановить мой реселлер-просмотр от сброса? - PullRequest
0 голосов
/ 12 апреля 2019

Я разрабатываю интерфейс чата. Когда я отправляю сообщение, оно раздувается правильно. Однако, когда я отправляю другое сообщение, новое сообщение добавляется вверху нового экрана, а не под предыдущим сообщением. Кроме того, когда я получаю ответ, он добавляется ниже того, который я отправил. После этого следующее полученное или отправленное сообщение будет добавлено на новый экран. Как я могу предотвратить это?

Вот мой файл 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();
        }

Ответы [ 2 ]

0 голосов
/ 12 апреля 2019

1) сделайте так, чтобы вы использовали эту команду:

linearLayoutManager.setStackFromEnd(true);

2) Я не вижу ваш onBindViewHolder метод в классе ChatAdapter, вы должны использовать его, он определенно решит вашу проблему

3) Когда вы добавляете сообщение, сделайте это так:

String messageString = txtMessage.getText().toString();
    if (messageString.trim().length() > 0) {
        // update the views
        txtMessage.setText("");
        Message message = new Message(messageString);
        ListOfMessage.add(message);
        adapter.notifyDataSetChanged();
0 голосов
/ 12 апреля 2019

Попробуйте использовать adapter.notfifyItemInserted вместо adapter.notifyDataSetChanged

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...