goyo
goyo

Reputation: 49

RecyclerView inside of NestedScrollView fires all onBindViewHolder at once

I want to have scrollable screen with RecyclerView as one of its children, hierarchy would look like that:

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

Note that all the items of RecyclerView should be visible and be siblings of ImageView, FrameLayout etc.

In the current solution, there is one significant issue, onBindViewHolder is called for all items at once, but I want them to be bind when they appear on the screen, like in standard RecyclerView. I was doing some experiments with

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

but it failed after all.

I know one of the solutions is implementing heterogeneous recyclerView, but I would like to avoid it. Any ideas?

Upvotes: 0

Views: 351

Answers (1)

Probably it happens because in this case, recyclerview cant know the height of itself. Can you try:

layoutManager.isAutoMeasureEnabled=true

Upvotes: 2

Related Questions