TransWikia.com

Скролл при добавлении элемента в RecyclerView

Stack Overflow на русском Asked by Simatsu Edgeworth on December 19, 2021

Есть RecyclerView, в который могут добавляться элементы в начало и конец списка.

<android.support.v7.widget.RecyclerView
    android:id="@+id/recylerview_message_list"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_marginBottom="6dp"
    app:layout_constraintBottom_toTopOf="@id/view"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toBottomOf="@id/main_appBarLayout">

При добавлении в начало все ок, но при добавлении в конец все автоматически скроллится на 4 элемента вверх.

Инициализация recyclerView:

    @Override
    public void showMessages(List<MessageModel> messages) {
        chatMessages = messages;
        Collections.sort(chatMessages);

        linearLayoutManager = new LinearLayoutManager(this, OrientationHelper.VERTICAL, false);
        recyclerView.setAdapter(messageListAdapter);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setOnScrollListener(new EndlessRecyclerViewScrollListener(linearLayoutManager, this));

        linearLayoutManager.setStackFromEnd(true);

        chatLoadingProgressBar.setVisibility(View.INVISIBLE);
        view.setVisibility(View.VISIBLE);
        layoutChatBox.setVisibility(View.VISIBLE);
    }

Добавление нового элемента (Закомментированно то что я уже попробовал)

@Override
public void addMessage(MessageModel message) {
    //List<MessageModel> oldMessages = new ArrayList<>(chatMessages);

    chatMessages.add(message);

    //linearLayoutManager.onRestoreInstanceState(recyclerViewState);

    //recyclerView.setAdapter(messageListAdapter);

    //messageListAdapter.notifyItemRangeChanged(0, chatMessages.size());
    //messageListAdapter.notifyItemRangeChanged(messageListAdapter.getItemCount(), chatMessages.size());
    //messageListAdapter.notifyDataSetChanged();
    //messageListAdapter.notifyItemInserted(chatMessages.size());

    //DiffUtil.DiffResult result = DiffUtil.calculateDiff(new CustomDiffUtilCallback(old, chatMessages));
    //result.dispatchUpdatesTo(messageListAdapter);
}

Как отключить автоматический скролл при добавлении элементов в конец списка? При добавлении в начало все работает с messageListAdapter.notifyItemInserted(0);

One Answer

возможно это ответ на ваш

Используйте recyclerView.smoothScrollToPosition

recyclerView.smoothScrollToPosition(recyclerView.getAdapter().getItemCount() - 1);

Answered by Геннадий Курбесов on December 19, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP