1. ホーム
  2. java

onBindViewHolderが呼ばれるタイミングとその動作は?

2023-09-24 16:48:27

質問

私は初心者で、あるコードの一部が理解できずに困っています。どなたか、この関数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() . 最初は新しい未使用のビューホルダーを取得し、表示したいデータでそれらを埋める必要があります。しかし、スクロールしていくと、画面外に出た行に使われていたビューホルダーを取得し始め、それらが保持していた古いデータを新しいデータで置き換えなければならなくなります。