RecyclerView setHasFixedSize を理解する 質問する

RecyclerView setHasFixedSize を理解する 質問する

を理解するのに苦労しています。ドキュメントによると、setHasFixedSize()のサイズが変わらない場合に最適化のために使用されることはわかっています。RecyclerView

しかし、それは何を意味するのでしょうか? ほとんどの場合、 はListViewほぼ常に固定サイズです。 固定サイズではないのはどのような場合でしょうか? 画面上で占める実際の領域がコンテンツに応じて拡大するという意味でしょうか?

ベストアンサー1

とてもRecyclerView の簡易バージョンには次の機能があります:

void onItemsInsertedOrRemoved() {
   if (hasFixedSize) layoutChildren();
   else requestLayout();
}

このリンク呼び出しがなぜrequestLayoutコストがかかる可能性があるのか​​を説明します。基本的に、アイテムが挿入、移動、または削除されるたびに、RecyclerView のサイズ (幅と高さ) が変わる可能性があり、その結果、ビュー階層内の他のビューのサイズも変わる可能性があります。アイテムが頻繁に追加または削除される場合、これは特に問題になります。

setHasFixedSizeアダプターのコンテンツを変更しても高さや幅が変更されない場合は、true に設定して不要なレイアウト パスを回避します。


アップデート:メソッドが実際に何を行うかをより適切に説明するために、JavaDoc が更新されました。

RecyclerView は、そのサイズがアダプタの内容によって影響を受けないことを事前に把握していれば、いくつかの最適化を実行できます。RecyclerView は、他の要因 (親のサイズなど) に基づいてサイズを変更できますが、このサイズの計算は、子のサイズやアダプタの内容 (アダプタ内のアイテムの数を除く) に依存することはできません。

RecyclerView の使用がこのカテゴリに該当する場合は、これを {@code true} に設定します。これにより、RecyclerView はアダプタの内容が変更されたときにレイアウト全体を無効化することを回避できます。

@param hasFixedSize アダプターの変更が RecyclerView のサイズに影響を与えない場合は true になります。

おすすめ記事