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



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



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

784   10  

10 ответов:

попробовать

recyclerView.setNestedScrollingEnabled(false);

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

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

надеюсь, что это поможет!

Я работал на 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;
            }
        });

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

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

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

    scrollView.setNestedScrollingEnabled(false);
    
recyclerView.setNestedScrollingEnabled(false);

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

варианты:

попробуйте CollapsiveToolbarLayout с видом Recycler. поместите другие виды в макет collapsiveTollbar.

вы можете использовать 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);
}

Я тоже столкнулся с этой проблемой. И обновление до 26.1.0 восстановить ее.

лучший способ-это :

recyclerView.setNestedScrollingEnabled(false);

Это вай. NestedScrollView измеряет свои дочерние элементы с помощью спецификации "Unspecified". Ребенок тоже может расти столько, сколько захочет.

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

оберните ваш RV С LL и дайте вашему RV высоту. LL не будет устанавливать спецификацию измерения неуказанной, поэтому RV будет правильно прокручиваться в пределах установленной высоты любого DPs, который вы обеспечивать.

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

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

<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>

Comments

    Ничего не найдено.