ItemDecoration не работает внутри NestedScrollView - PullRequest
0 голосов
/ 23 февраля 2020

Я реализовал RecyclerView с липкими заголовками и сделал это через ItemDecoration. Он работает, как и ожидалось, в случае автономного представления переработчика.

<LinearLayout ...>
    <androidx.recyclerview.widget.RecyclerView .../>
    <androidx.recyclerview.widget.RecyclerView ... /> // ItemDecoration is supposed to be here and it works excellent
</LinearLayout>

Но у меня есть два списка, и мне нужно использовать NestedScrollView

<androidx.core.widget.NestedScrollView ...>
<LinearLayout ...>
    <androidx.recyclerview.widget.RecyclerView .../>
    <androidx.recyclerview.widget.RecyclerView ... /> // It doesn't work here
</LinearLayout>
</androidx.core.widget.NestedScrollView ...>

В этом случае ItemDecoration не работа.

Я обнаружил следующую информацию:

  • onDrawOver не вызывается при прокрутке, потому что RecyclerView.draw () также не вызывается.

  • Все элементы создаются одновременно (поэтому Adapter создает держатели видов для всех элементов данных). Это плохо, но это не моя главная проблема.

  • Я пытался вызвать перерисовку повторного просмотра при прокрутке, но она не работает

Сделать у вас есть какие-либо советы, как это исправить?

UPD xml файл:

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.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:fillViewport="true"
    android:scrollbars="none">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/black_background_color"
        android:focusableInTouchMode="true"
        android:orientation="vertical">
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/menuNewsList"
            android:layout_width="match_parent"
            android:layout_height="170dp" />
        <androidx.recyclerview.widget.RecyclerView
            android:id="@+id/listMenu"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_gravity="center"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
    </LinearLayout>
</androidx.core.widget.NestedScrollView>

Инициализация кода:

listMenu.apply {
    adapter = dishAdapter
    isNestedScrollingEnabled = false
}
listMenu.addItemDecoration(HeaderItemDecoration(listMenu, isHeader = isHeader()))

HeaderItemDecoration был скопирован оттуда Как я могу сделать липкие заголовки в RecyclerView? (Без внешней библиотеки)

1 Ответ

0 голосов
/ 23 февраля 2020

Не следует ли добавить ItemDecoration к RecyclerView с использованием метода addDecoration(ItemDecoration decoration)?

...