public class ImageLoadTask extends AsyncTask<Void, Void, Bitmap> {
private String url;
private ImageView imageView;
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(courseImageArray[position], ivCourse).execute();
在imageView中,片段启动时图像显示正常。但是一旦我向下滚动并返回,图像就会消失。 请帮助,当列表视图向下滚动时图像消失
以下是适配器的代码(如果需要)
class CustomAdapter extends BaseAdapter {
@Override
public int getCount() {
return courseArray.length;
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Log.e("listView","listview");
LayoutInflater layoutInflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view1 = layoutInflater.inflate(R.layout.all_course_item, null,true);
view1.setBackgroundColor(Color.LTGRAY);
TextView tvCourseName = (TextView)view1.findViewById(R.id.tvCourseName);
TextView tvHidden = (TextView)view1.findViewById(R.id.tvHidden);
TextView tvHiddenUrl = (TextView)view1.findViewById(R.id.tvHiddenUrl);
TextView tvFee= (TextView)view1.findViewById(R.id.tvFee);
TextView tvStudentsEnrolled = (TextView)view1.findViewById(R.id.tvStudentsEnrolled);
TextView tvDuration = (TextView)view1.findViewById(R.id.tvDuration);
if ("free".equals(coursePaidArray[position])) {
tvFee.setText("FREE");
tvFee.setTextColor(Color.BLUE);
Log.e("Its free","free");
}
else {
Log.e("paid", coursePriceArray[position]);
tvFee.setText(coursePriceArray[position]);
tvFee.setTextColor(Color.RED);
}
TextView tvRegistered = (TextView) view1.findViewById(R.id.tvRegistered);
ImageView ivCourse = (ImageView) view1.findViewById(R.id.ivCourse);
tvStudentsEnrolled.setText(numEnrolledArray[position]);
tvRegistered.setText(courseStatusArray[position]);
tvHiddenUrl.setText(courseurlArray[position]);
tvHidden.setText(courseidArray[position]);
tvCourseName.setText(courseArray[position]);
tvCourseName.setTextColor(Color.MAGENTA);
tvDuration.setText(courseDurationArray[position]);
Log.e("img",courseImageArray[position]);
new ImageLoadTask(courseImageArray[position], ivCourse).execute();
//Bitmap bmap = getBitmapFromURL(courseImageArray[position]);
// ivCourse.setImageBitmap(bmap);
return view1;
}
}
让我知道我做错了什么,因为我无法找出任何方法。 感谢
编辑:我使用了PICASSO库并且工作顺利。
答案 0 :(得分:0)
强烈建议不要为任何视图保留强大的参考。
这样的任务非常复杂。
首先,您应该为要加载图像的图像视图创建WeakeReference<>
。
第二件事 - 我建议为传递给AsyncTask
的每张图片创建一个标签。 (你的观点可以改变)。
试着看看link。
在官方的Android博客中也有类似的帖子,但我找不到它(