Recyclerview внутри прокрутки вложенной прокрутки, но не ускоряет прокрутку, как обычно Recyclerview или Nested Scrollview

Я использую RecyclerView внутри NestedScrollView, и он работает. Но когда я использую RecyclerView внутри LinearLayout или что-то, он прокручивается с различной скоростью в зависимости от жестов. Прокрутка прослушивает жест, и если я немного поднимусь, то он немного прокручивается, а если я покажусь очень быстро, тогда он прокручивается очень быстро. Теперь моя проблема в том, что RecyclerView внутри NestedScrollView, конечно, прокручивается, но быстрый прокрутка не работает. Однако я быстро или медленно выдвигаюсь, RecyclerView или NestedScrollView только немного прокручивается.

Как я могу сделать мои NestedScrollView или RecyclerView внутри прокрутки прокрутки с различной скоростью?

Ответ 1

попробовать

recyclerView.setNestedScrollingEnabled(false);

Ответ 2

По умолчанию setNestedScrollingEnabled работает только после API-21.

Вы можете использовать ViewCompat.setNestedScrollingEnabled(recyclerView, false); для отключения вложенной прокрутки до и после API-21 (Lollipop). Ссылка на документацию.

Надеюсь на эту помощь!

Ответ 3

Я работал над android 16, где было невозможно использовать метод setNestedSCrollEnabled,

Что я делаю, чтобы остановить RecyclerView от обработки свитков.

Как и в LinerLayoutManager, я сделал canScrollHorizontally, canScrollVertically, чтобы вернуть false по умолчанию.

myRecyclerView.setLayoutManager(new LinearLayoutManager(getContext(), LinearLayoutManager.VERTICAL, false){
            @Override
            public boolean canScrollHorizontally() {
                return false;
            }

            @Override
            public boolean canScrollVertically() {
                return false;
            }
        });

Ответ 4

После нескольких итераций я придумал решение.

  • Если вы используете RecyclerView, то:

    recyclerView.setNestedScrollingEnabled(false);
    
  • Если вы используете LinearLayout внутри NestedScrollingView, возьмите LinearLayout внутри обычного ScrollView и затем установите его прокрутку в

    scrollView.setNestedScrollingEnabled(false);
    

Ответ 5

Вы можете использовать ScrollView с классом ExtendRecyclerView, который переопределяет метод onMeasure. Это работает для меня!

@Override
protected void onMeasure(int widthSpec, int heightSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
    super.onMeasure(widthSpec, expandSpec);
}

Ответ 6

recyclerView.setNestedScrollingEnabled(false);

Будет полезно иногда. Но это нецелесообразно для всех времен. Потому что он отключает функцию рециркуляции вида в режиме recylcer.

Альтернатива:

Попробуйте CollapsiveToolbarLayout с просмотром Recycler. поместить другие представления в collapsiveTollbar layout.

Ответ 7

Это WAI. NestedScrollView измеряет свои дочерние элементы с помощью Spec "Unspecified". Ребенок может расти как можно больше.

Это, по существу, означает высоту NSV и RV. Что касается RV, он считает, что он полностью отображается.

Оберните свой RV LL и дайте RV высоту. LL не установил бы, чтобы спецификация измерения была НЕ ОПРЕДЕЛЕНА, чтобы RV правильно прокручивал в пределах своей установленной высоты любые DP, которые вы предоставляете.

Единственный недостаток этого метода заключается в том, что вы не сможете сделать родительский матч в своем RV.

Ответ 8

Вы должны перенести вид ресайзера в любой макет, например LinearLayout, и установить размер RecyclerView на константу, например 800dp. Это позволит обеспечить плавное отображение прокрутки и ресайклера во время прокрутки по-прежнему во время просмотра.

<android.support.v4.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
                                xmlns:app="http://schemas.android.com/apk/res-auto"
                                android:layout_width="match_parent"
                                android:layout_height="match_parent"
                                android:orientation="vertical">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="800dp"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</LinearLayout>