問題RecyclerViewを非同期でどのように読み込む必要がありますか?
私のRecyclerViewは写真で要素を表示します。すべての写真がインターネットからダウンロードされており、数秒かかることがあります。したがって、私はUIスレッドをブロックしないようにしようとし、Handlerに渡しますが、RecyclerViewのリサイクルのために画像が正しく表示されません。
これは、それがどのように見えるかです:私はスクロールダウンリストの項目にリスト項目に
ロード画像1を2
1.
ロード画像2。リスト項目に
ロード画像3を20
ロード画像4リスト項目に21
ロード画像4リスト項目にリストアイテム21
に20ロード画像5
最後はすべて正常ですが、読み込みプロセス中に、RecyclerViewは間違ったイメージでViewHoldersをリサイクルします!
私のコード
mHandler.post(new Runnable() {
@Override
public void run() {
final Uri image = complexFetchingFunction();
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
try {
holder.imageView.setImageURI(image);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
});
エンド
ハンドラは、別のスレッドで動作します。それは確かです。 イメージを非同期に読み込み、RecyclerViewがそれを気に入らないため、これらのことが起こっていることはわかっていますが、そうでない場合は痛いほど遅いです。
解決方法はありますか?
ハンドラーは、それらを導入したスレッドのコンテキストで動作します。ハンドラがUIスレッドで起動されている場合、ハンドラはUIスレッドで実行されません。 – Blackbelt
UIスレッドでは実行されません。ハンドラーの初期化は少し時間がかかります。 – Ukubu
ここに示すコードはどのような方法とクラスに含まれていますか? –