asysncタスクを使用して画像を表示するにはrecyclerViewを使用しています。私はWebサーバーからイメージを取得しています。私のコードは私のImageLoaderのasysncタスクがAndroid:リサイクラビューの画像リクエストをキャンセルするには
public class ImageLoadTask extends AsyncTask<Void, Void, Bitmap> {
private String url;
private ImageView imageView;
ProgressDialog pDialog;
public ImageLoadTask(String url, ImageView imageView) {
this.url = url;
this.imageView = imageView;
}
@Override
protected Bitmap doInBackground(Void... params) {
try {
URL urlConnection = new URL(url);
HttpURLConnection connection = (HttpURLConnection) urlConnection
.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap result) {
super.onPostExecute(result);
imageView.setImageBitmap(result);
}
}
問題は、私がスクロールしたときであり、画像がダウンロードされる前に、一の以上のビューをスキップして、それである私が
new ImageLoadTask(url, holder.imageView).execute();
呼び出すMethodeのonBindViewHolderから
ですビューはリサイクルされます。実際のイメージがそのビューにロードされる前に、それらのイメージがフラッシュされる中間ビューでは、donwnload reqestは取り消されません。
アダプタからHttpURLConnection
を渡して試してみましたが、ヌルでないかどうかを確認してからdisconnect
を前述のようにonBindViewHolder
メソッドから呼び出しましたが、それでも起こります。私は使用しています
if (holder.urlConnection != null)
{
holder.urlConnection.disconnect();
try {
holder.urlConnection.getInputStream().close();
}
catch (Exception e) {
e.printStackTrace();
}
holder.urlConnection = null;
}
new ImageLoadTask(url, holder.imageView,holder.viewHolderActivity, holder.urlConnection).execute();
イメージリクエストをキャンセルするにはどうすればよいですか?あなたのViewHolder
あなたImageLoadTask
への参照を保持オン
ImageLoadTask imageLoadTask=new ImageLoadTask(url, holder.imageView);
imageLoadTask.cancel(true);