RecyclerView внутри NestedScrollView запускает все onBindViewHolder одновременно - PullRequest
0 голосов
/ 07 декабря 2018

Я хочу иметь прокручиваемый экран с RecyclerView в качестве одного из его дочерних элементов, иерархия будет выглядеть так:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    ...
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        .../>

    <android.support.v4.widget.NestedScrollView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

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

            <ImageView
                .../>

            <FrameLayout
                .../>

            <android.support.v7.widget.RecyclerView
                android:id="@+id/list_contacts"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:clipToPadding="false"
                android:nestedScrollingEnabled="false"/>

            <FrameLayout
                .../>

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

Обратите внимание, что все элементы RecyclerView должны быть видныи быть братьями и сестрами ImageView , FrameLayout и т. д.

В текущем решении существует одна существенная проблема: onBindViewHolder вызывается для всех элементовсразу, но я хочу, чтобы они были связаны, когда они появляются на экране, как в стандартном RecyclerView.Я проводил несколько экспериментов с

android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"

, но он все-таки не удался.

Я знаю, что одно из решений - это реализация гетерогенного recyclerView, но я бы хотел избежатьЭто.Есть идеи?

1 Ответ

0 голосов
/ 07 декабря 2018

Вероятно, это происходит потому, что в этом случае просмотрщик не может знать высоту самого себя.Можете ли вы попробовать:

layoutManager.isAutoMeasureEnabled=true
...