国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

RecyclerView中,圖片加載重用問題,異步加載圖片

2019-11-09 17:12:57
字體:
來源:轉載
供稿:網友

額,首先要感謝這位兄臺,然后我就直接上代碼吧

解決方式1 demo代碼:public class MyRecyclerAdapter extends RecyclerView.Adapter {PRivate static final String TAG = "MyRecyclerAdapter";private List mData;private Context mContext;private LayoutInflater inflater;public MyRecyclerAdapter(Context context, List data) {this.mContext = context;this.mData = data;inflater = LayoutInflater.from(mContext);}@Overridepublic int getItemCount() {return mData.size();}@Overridepublic void onViewRecycled(MyViewHolder holder) {super.onViewRecycled(holder);AsyncTask asyncTask = (AsyncTask) holder.imageView.getTag(1);asyncTask.cancel(true);}@Overridepublic void onBindViewHolder(final MyViewHolder holder, final int position) {//先設置圖片占位符holder.imageView.setImageDrawable(mContext.getDrawable(R.mipmap.ic_launcher));AsyncTask asyncTask = new AsyncTask() {@Overrideprotected Bitmap doInBackground(Void... params) {try {URL url = new URL(mData.get(position));Bitmap bitmap = BitmapFactory.decodeStream(url.openStream());return bitmap;} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}@Overrideprotected void onPostExecute(Bitmap bitmap) {super.onPostExecute(bitmap);holder.imageView.setImageBitmap(bitmap);}};holder.imageView.setTag(1,asyncTask);asyncTask.execute();}@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = inflater.inflate(R.layout.item_layout, parent, false);return new MyViewHolder(view);}static class MyViewHolder extends RecyclerView.ViewHolder {ImageView imageView;public MyViewHolder(View view) {super(view);imageView = (ImageView) view.findViewById(R.id.id_img);}}}或者這樣寫:

解決方式2 demo代碼:public class MyRecyclerAdapter extends RecyclerView.Adapter {private static final String TAG = "MyRecyclerAdapter";private List mData;private Context mContext;private LayoutInflater inflater;public MyRecyclerAdapter(Context context, List data) {this.mContext = context;this.mData = data;inflater = LayoutInflater.from(mContext);}@Overridepublic int getItemCount() {return mData.size();}@Overridepublic void onViewRecycled(MyViewHolder holder) {super.onViewRecycled(holder);}@Overridepublic void onBindViewHolder(final MyViewHolder holder, final int position) {//先設置圖片占位符holder.imageView.setImageDrawable(mContext.getDrawable(R.mipmap.ic_launcher));final String url = mData.get(position);//為imageView設置Tag,內容是該imageView等待加載的圖片urlholder.imageView.setTag(url);AsyncTask asyncTask = new AsyncTask() {@Overrideprotected Bitmap doInBackground(Void... params) {try {URL url = new URL(mData.get(position));Bitmap bitmap = BitmapFactory.decodeStream(url.openStream());return bitmap;} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}@Overrideprotected void onPostExecute(Bitmap bitmap) {super.onPostExecute(bitmap);//加載完畢后判斷該imageView等待的圖片url是不是加載完畢的這張//如果是則為imageView設置圖片,否則說明imageView已經被重用到其他itemif(url.equals(holder.imageView.getTag())) {holder.imageView.setImageBitmap(bitmap);}}}.execute();}@Overridepublic MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view = inflater.inflate(R.layout.item_layout, parent, false);return new MyViewHolder(view);}static class MyViewHolder extends RecyclerView.ViewHolder {ImageView imageView;public MyViewHolder(View view) {super(view);imageView = (ImageView) view.findViewById(R.id.id_img);}}}

ok,完美解決圖片異步加載問題。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 洪泽县| 洪雅县| 灯塔市| 新巴尔虎左旗| 阜宁县| 咸阳市| 西华县| 报价| 绥阳县| 阳高县| 长垣县| 沧州市| 彭水| 双牌县| 汾阳市| 榆林市| 金塔县| 延庆县| 周口市| 余干县| 北川| 淮北市| 平利县| 满洲里市| 贵阳市| 奇台县| 阳信县| 临朐县| 邛崃市| 盈江县| 密山市| 苍溪县| 井研县| 屯昌县| 定日县| 望奎县| 隆安县| 侯马市| 玉林市| 大城县| 阳曲县|