2016-04-16 9 views
2

私は自分のアプリでリサイクラービューを持っています。リサイクラの各ビュー項目にはimageViewがあります。私はasyncTaskを使用してビットマップをロードし、ディスクキャッシュに追加してからonPostExecuteのイメージビューに設定します。Android:リサイクラーの画像アイテムをスクロールして速くシャッフル

問題は、私は、リストをスクロールした場合、高速、私は正しい画像がその項目に設定される前に、多くのシャッフルの画像を見ることができるということです。私がこの振る舞いについて理解していることは、リストをスクロールするときに、リサイクラーの表示アイテムのコンテンツが新しいアイテムのコンテンツに置き換えられることです。しかし、画像をロードするのに時間がかかるので、シャッフル効果になります。

私の質問は、それがこの影響を防止または少なくとも非常に少ないシャッフルが発生するように、それを最小限にするためにどのような方法があるのですか?

編集:画像のビットマップをヌルに設定しようとしましたが、違いはありません。

@Override 
    public void onBindViewHolder(DataObjectHolder holder, int position) { 
     holder.title.setText(list.get(position).getTitle()); 
     holder.subTitle.setText(list.get(position).getSub()); 
     holder.image.setImageBitmap(null); 
     loadBitmap(position, holder.image); 
    } 
+0

項目のイメージがまだ利用できない場合には、リサイクル 'ImageView'はまだないので、あなたは、アダプタの' bindViewHolder() 'メソッドに' ImageView'に 'null'なので' Bitmap'を設定することができます以前に設定した画像を表示します。 –

+0

@MikeM。私はそれを働かせることはできませんが、私はこの提案を他の場所でも見てきました。私は私のbindViewHolderのコードを追加しました。これは私がそれをやるべき方法ですか? – varunkr

+0

あなたの 'loadBitmap()'メソッドが何をするかによって異なります。イメージがローカルストレージに既にあるかどうかを知ることができる、ある種のキャッシュ/ローダー実装を使用していると仮定していました。 –

答えて

0

リサイクラビューで複数のビットマップを読み込む場合は、asyncTaskを使用しないでください。独自のThreadPoolを作成するか、PicassoやGlideのようなサードパーティのライブラリを使用することもできます。 AsyncTaskはあなたが参照したリスト項目にビットマップをロードしようとしますが、スクロールが速すぎるとすべてがうんざりです。

0

Universal Image Loader(UIL)やPicassoやGlideのようなサードパーティのライブラリを使用してください。

関連する問題