【发布时间】:2016-05-18 08:27:52
【问题描述】:
我有一个 ListView 来显示带有短标题(ImageView + TexiView)的照片库。我使用 AsyncTask 来完成下载任务。但问题是有时它会显示错误的图像然后突然改变(可能发生很多次)。 例如:IA B C 将显示在 ListView 中,图像 m1 m2 m3 分别为 ABC。 当我运行应用程序时,A 的 imageView 可能会显示 m1、m2 或 m3 并经常更改。 这是我的代码:
下级:
public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage = null;
public DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
if(result == null){
bmImage.setImageResource(R.drawable.loading);
}else{
bmImage.setImageBitmap(result);
}
}
}
ListView 的适配器:
public View getView(int position, View convertView, ViewGroup parent){
item item1 = getItem(position);
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(R.layout.item1, parent, false);
}
ImageView iv = (ImageView) convertView.findViewById(R.id.img);
TextView ttv = (TextView) convertView.findViewById(R.id.p_title);
TextView itv = (TextView) convertView.findViewById(R.id.p_price);
/**
*Download Image
*/
String img_url;
img_url = item1.getImg_url();
new DownloadImageTask((ImageView) convertView.findViewById(R.id.img))
.execute(img_url);
ttv.setText(item1.getTitle());
itv.setText("$"+item1.getPrice());
return convertView;
}
活动:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show_promotion2);
gridView = (GridView) findViewById(R.id.gridview);
getPromotionByRequest(previousPage, data);//Get Data for items
itemAdapter = new promotionAdapter(this, items);
//progress..........
gridView.setAdapter(itemAdapter);
setupListViewListener();
}
【问题讨论】:
-
显示您使用的所有部件。异步返回后会发生什么,如何填充适配器等。
标签: android listview android-asynctask android-imageview