1. ホーム
  2. android

[解決済み] RecyclerViewのsetHasFixedSizeを理解する

2022-04-22 16:24:24

質問

を理解するのに苦労しています。 setHasFixedSize() . のサイズが小さいときに最適化のために使用されることは知っています。 RecyclerView は、docsから、変更されません。

しかし、それはどういう意味なのでしょうか?ほとんどの場合 ListView は、ほとんどの場合、固定サイズです。どのような場合に固定サイズでなくなるのでしょうか?画面上で占める実際の面積は、コンテンツに合わせて大きくなるということでしょうか?

どのように解決するのですか?

A 非常に RecyclerViewの簡略化されたバージョンがあります。

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

このリンク を呼び出す理由を説明します。 requestLayout は高くつくかもしれません。基本的に、アイテムが挿入、移動、削除されるたびに、RecyclerViewのサイズ(幅と高さ)が変化し、ビュー階層内の他のビューのサイズも変化する可能性があります。これは、アイテムが頻繁に追加または削除される場合、特に厄介なことです。

を設定することで、不要なレイアウトパスを回避することができます。 setHasFixedSize を true に設定すると、 アダプタの内容を変更しても高さや幅が変わらないようになります。


更新しました。 JavaDocが更新され、このメソッドが実際に何をするのかがよりよく説明されるようになりました。

<ブロッククオート

RecyclerViewは、以下のような最適化を行うことができます。 RecyclerViewのサイズがアダプタのサイズに影響されないことを事前に確認します。 の内容です。RecyclerViewはまだ、他の を計算することはできません(例:親のサイズ)。 子プロセスのサイズやアダプタの内容には依存しません。 アダプタ内のアイテム数)。

を使用する場合、RecyclerView に該当する場合は、{@code true}に設定してください。これにより RecyclerViewは、そのアダプタのレイアウト全体が無効になることを回避します。 の内容が変更されます。

アダプタの変更がサイズに影響しない場合は、 @param hasFixedSize true を指定します。 は、RecyclerViewの