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>
RecyclerView
内のNestedScrollView
のこのケース。
RecyclerView
はデータサイズに等しいonCreateViewHolder()
回を呼び出しています。
データに200個のアイテムがある場合、onCreateViewHolder()
が200回呼び出されるためにフリーズします。
上記の問題は、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