Recyclerview всередині вкладеного Scrollview, але не швидко прокручує, як звичайний Recyclerview або Nested Scrollview


96

Я використовую RecyclerViewвсередині, NestedScrollViewі це працює. Але коли я використовую RecyclerViewвсередині LinearLayoutабо щось інше, воно прокручується з різною швидкістю залежно від жесту. Прокрутка прослуховує жест, і якщо я просунувся лише трохи вгору, то він прокрутиться трохи, тоді як якщо я просунусь вгору дуже швидко, то він прокрутиться дуже швидко. Зараз моя проблема в тому, що RecyclerViewвсередині, NestedScrollViewзвичайно, прокрутка, але швидка прокрутка не працює. Однак я ковзаю швидко або повільно,RecyclerView або NestedScrollViewлише трохи прокручую.

Як я можу зробити свій NestedScrollViewабо RecyclerViewвсередині цього виду прокрутки прокрутку з різною швидкістю?


3
recyclerView.setNestedScrollingEnabled (false); Це справді працює !!
Aung Si Min Htet

stackoverflow.com/questions/27083091/… Рішення можна знайти тут.
maruti060385

Будь ласка, використовуйте open fun setNestedScrollingEnabled (увімкнено: Boolean): Unit Сподіваюся, це допоможе вам
Int0TheRainb0w

Відповіді:


266

спробуйте

recyclerView.setNestedScrollingEnabled(false);

14
Але за цим налаштуванням reciclerview не переробляє подання! яка ваша думка про це?
ТРАВЕНЬ

Насправді я додаю два або більше подань утилізатора з різними менеджерами макета (наприклад, «Лінійний макет» та «Макет сітки») у свій макет, який також включає банер та інші види. Тож для того, щоб обробляти подання утилізатора таким чином, поміщаючи все це всередину виправлення вкладеного прокручування для мене.
Aung Si Min Htet

24
Я не знаю, як ця відповідь отримала стільки голосів. Якщо вимкнути вкладену прокрутку, це перемагає її призначення. Що робити, якщо я хочу використовувати вкладені сувої та утилізатор ?? Щось на зразок CoordinatorLayout, AppBarLayout та RecyclerView ??
Jimit Patel

Дякую @JimitPatel, це саме моя проблема на даний момент. У мене є перегляд перегляду в поданні вкладеної прокрутки, і я не можу прокрутити. stackoverflow.com/questions/41259756/…
Каролі

1
@Karoly потрібно налаштувати вкладені сувої ... Я це ... Опублікую це за кілька годин ... Наразі я подорожую. Я зіткнувся з цією проблемою в ефекті паралаксу з видом переробника після панелі інструментів.
Jimit Patel

53

За замовчуванням setNestedScrollingEnabledпрацює лише після API-21.

Ви можете використовувати, ViewCompat.setNestedScrollingEnabled(recyclerView, false);щоб вимкнути вкладену прокрутку до і після API-21 (льодяник). Посилання на документацію .

Сподіваюся, що це допоможе!


22

Я працював на android 16, де це було неможливо використовувати метод setNestedSCrollEnabled,

Що я в підсумку роблю, щоб зупинити RecyclerView від обробки сувоїв.

Як і в LinerLayoutManager, я зробив canScrollHorizontally, canScrollVertical для повернення false за замовчуванням.

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

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

Це насправді спрацювало для мене. У мене був RecyclerView, всередині LinearLinear, всередині ScrollView.
FonzTech

9

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

  1. Якщо ви використовуєте RecyclerView, тоді:

    recyclerView.setNestedScrollingEnabled(false);
  2. Якщо ви використовуєте LinearLayout всередині NestedScrollingView, візьміть LinearLayout всередині звичайного ScrollView, а потім встановіть його прокрутку на

    scrollView.setNestedScrollingEnabled(false);

2

android: overScrollMode = "ніколи

  <android.support.v4.widget.NestedScrollView
    android:id="@+id/nestedScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never">


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

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyclerView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>
 </android.support.v4.widget.NestedScrollView>

1

Ви можете використовувати 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);
}

1
recyclerView.setNestedScrollingEnabled(false);

Іноді буде корисно, але це не рекомендується постійно. Оскільки це вимикає функцію перегляду перегляду у поданні рециркулятора.

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

Спробуйте CollapsiveToolbarLayout із видом Recycler. помістити інші види в розкладний макет.


0

Я теж зустрів цю проблему. І оновіть, щоб 26.1.0це виправити.


-1

У «Моєму випадку» я розмістив усі зображення у папці, що малюється, з папкою drawable-xxxhdpi, тому мій інтерфейс екрану відстає.


-3

Вам слід обернути подання утилізатора в будь-який макет, наприклад 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>


1
Це хороша відповідь, оскільки вона вказує на спосіб вирішення проблеми прокрутки, не порушуючи основної переваги RecyclerView, завантажуючи лише видимі види та переробляючи їх, коли вони прокручуються з поля зору. Можливо, люди проголосували проти, оскільки фіксоване значення, таке як 800dp, не буде працювати у всіх розмірах екрана та орієнтації, але значення layout_height можна було б розрахувати та встановити програмно - трохи брудно, але це вирішує обидві проблеми.
jk7

-3

Це WAI. NestedScrollView вимірює своїх дітей за допомогою специфікації "Не вказано". Дитина теж може рости скільки завгодно.

Це по суті дорівнює висоті NSV та RV. Що стосується RV, то він вважає, що він повністю відображений.

Оберніть свій RV LL і надайте RV висоту. LL не встановить специфікацію міри як НЕ ВКАЗАНУ, тому RV буде правильно прокручувати в межах встановленої висоти будь-які DP, які ви надаєте.

Єдиним недоліком цього методу є те, що ви не зможете зробити батьківський збіг на своєму RV.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.