onBindViewHolderが呼ばれるタイミングとその動作は?
質問
私は初心者で、あるコードの一部が理解できずに困っています。どなたか、この関数evokeはいつ、何のためにあるのか、説明していただけませんか?
以下は私のコードです。
public void onBindViewHolder(myViewHolder holder, int position) {
RecViewHolder currentdata = data.get(position);
holder.favChecker = currentdata.getFavChecker();
holder.serialID = currentdata.getSerialID();
holder.theClassName = currentdata.getTheClassName();
}
どのように解決するのですか?
まず、ほんの少し背景を説明します(すでに理解しているかもしれませんが、説明するために必要です)。
onBindViewHolder()
).
RecyclerView
は、長い項目のリスト(またはグリッド)を表示するために設計されています。例えば、100 行の何かを表示したいとします。単純な方法としては、100 個のビューを作成して、それぞれの行に 1 つずつ、すべてのビューをレイアウトすることでしょう。しかし、それは無駄なことです。なぜなら、それらのほとんどは画面の外にあり、10個しか画面に収まらないとします。
そこで
RecyclerView
の代わりに、画面に表示されている 10 個のビューだけを作成します。こうすることで、速度とメモリ使用量を 10 倍にすることができます。しかし、スクロールを開始し、次のビューを表示する必要がある場合はどうなりますか?
ここでも単純なアプローチは、表示する必要がある新しい行ごとに新しいビューを作成することです。しかし、この方法では、リストの最後に到達するまでに、100 のビューを作成することになり、メモリ使用量は最初のアプローチと同じになります。また、ビューの作成には時間がかかるので、スクロールはおそらくスムーズではないでしょう。
このため
RecyclerView
は、スクロールして新しい行が画面に現れると、古い行も画面の外に消えてしまうという事実を利用しています。新しい行ごとに新しいビューを作成するのではなく、古いビューを
を再利用します。
新しいデータをバインドして再利用します。
これはまさに
onBindViewHolder()
. 最初は新しい未使用のビューホルダーを取得し、表示したいデータでそれらを埋める必要があります。しかし、スクロールしていくと、画面外に出た行に使われていたビューホルダーを取得し始め、それらが保持していた古いデータを新しいデータで置き換えなければならなくなります。
関連
-
セミコロン期待値エラー解決
-
Java基礎編 - オブジェクト指向
-
[解決済み] android.os.NetworkOnMainThreadException' を修正するにはどうすればよいですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Androidのソフトキーボードをプログラムで閉じる/隠すにはどうすればよいですか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み】「px」、「dip」、「dp」、「sp」の違いは?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
undefined[sonar] sonar:デフォルトのスキャンルール
-
メモ帳でJavaプログラムをコンパイルして実行すると、Could not find or load main class ...というエラーが表示される。解決方法
-
スレッド "main" での例外 java.lang.ArrayIndexOutOfBoundsException:5 エラー
-
無効な文字定数
-
BindException: アドレスはすでに使用中です:バインドエラー解決
-
eclipse にリソースリーク:'in' が閉じない
-
ecplise プロンプトが表示されます。"選択したものは起動できません。" "最近の起動はありません。"
-
Java基礎 - マッピングとQ/A
-
アクセス制限の解決方法: ---- in Java
-
ApiModel と @ApiModelProperty の使用法