web-dev-qa-db-ja.com

NestedScrollView内にある場合、大きなデータのリサイクラービューの読み込みが非常に遅い

RecyclerView内にNestedScrollViewを追加しました。基本的に、RecyclerViewを他のビューと一緒にスクロールさせたいです。私が直面している問題は、小さなデータセットでは正常に機能しているが、大きなデータセット(200エントリ)では、アクティビティを起動するたびに約3〜5秒間フリーズしてから、読み込まれることです。 NestedScrollViewを削除しましたが、問題なく動作していますが、希望する動作が得られません。

(詳細については、SQLiteデータベースからデータを読み込んでいます。スクロールはスムーズなので問題ありません。唯一の問題は、アクティビティがしばらくフリーズすることです)

<Android.support.v4.widget.NestedScrollView
            Android:layout_width="match_parent"
            Android:layout_height="match_parent">

            <LinearLayout
                Android:layout_width="match_parent"
                Android:layout_height="match_parent"
                Android:orientation="vertical">

                <... Some other Views ...>

                <Android.support.v7.widget.RecyclerView
                    Android:layout_width="wrap_content"
                    Android:layout_height="match_parent"
                    Android:orientation="vertical">

                </Android.support.v7.widget.RecyclerView>

            </LinearLayout>

        </Android.support.v4.widget.NestedScrollView>
12
Gurleen Sethi

RecyclerView内のNestedScrollViewのこのケース。

RecyclerViewはデータサイズに等しいonCreateViewHolder()回を呼び出しています。

データに200個のアイテムがある場合、onCreateViewHolder()が200回呼び出されるためにフリーズします。

9
배준모

上記の問題は、RecyclerViewの高さにWRAP_CONTENTまたはMATCH_PARENTを使用すると、NestedScrollViewの子またはsubChildとしてのRecyclerViewがその高さを不定詞として測定するためです。

私にとってこの問題を解決した1つの解決策は、RecyclerViewの高さを固定サイズに設定することでした。高さをdp値に設定するか、要件に垂直方向の不定詞RecyclerViewが必要な場合は、デバイスの高さに一致するピクセル値に設定できます。

これは、kotlinでrecyclerViewサイズを設定するためのスニペットです

    val params = recyclerView.layoutParams
    params.apply {
            width = context.resources.displayMetrics.widthPixels
            height = context.resources.displayMetrics.heightPixels
    }
    recyclerView.layoutParams = params
0
ilaimihar