Прокрутка Recyclerview до определенной позиции внутри NestedScrollView

Предположим, у меня есть 40 элементов в RecyclerView и я хочу прокрутить до элемента номер 20.

Вот как выглядит мой XML:

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/nestedScrollView"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <View
                android:layout_width="match_parent"
                android:layout_height="1000dp"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintTop_toTopOf="parent"/>


            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/testRecyclerview"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>

        </androidx.constraintlayout.widget.ConstraintLayout>

    </androidx.coordinatorlayout.widget.CoordinatorLayout>

</androidx.core.widget.NestedScrollView>

Код Java, который я использую в onCreate() для установки адаптера в RecyclerView:

            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getContext());
            testRecyclerview.setLayoutManager(linearLayoutManager);
            adapter = new ProductsAdapter(getActivity(), productModels);
            testRecyclerview.setAdapter(adapter);

В случае с LinearLayout это работает очень хорошо, но не с NestedScrollView.

testRecyclerview.getLayoutManager().scrollToPosition(20);

person new member    schedule 24.02.2020    source источник


Ответы (1)


Это должно работать в моем случае

 testRecyclerview.post(() -> {
            float y = testRecyclerview.getY() + testRecyclerview.getChildAt(50).getY();
            nestedScrollView.smoothScrollTo(0, (int) y);
        });
person Jignesh Mayani    schedule 24.02.2020
comment
попробуйте этот android:nestedScrollingEnabled=false в recycleview xml - person Jignesh Mayani; 24.02.2020
comment
что на 100 выше (имею в виду то, что смещено) - person new member; 24.02.2020
comment
Это расстояние от вершины до элемента recycleview - person Jignesh Mayani; 24.02.2020
comment
пробовал с false для nestedScrollingEnabled в recyclerview, но не работал - person new member; 24.02.2020
comment
Можете ли вы поделиться своим java-файлом? я проверю, есть ли какая-то проблема, потому что в моем случае это сработает - person Jignesh Mayani; 24.02.2020
comment
конечно... я ценю - person new member; 24.02.2020
comment
пожалуйста, используйте RecyclerView внутри NestedScrollView, как и моя реализация - person new member; 24.02.2020