在ListFragment中我有一个ListView,其中包含一个图像和一些文本(参见Previous Solved Question)
我简单地设法让这个问题的解决方案起作用,但它现在停止了工作。
我正在AsyncTask
中加载图像位图,通过adapter.notifyDataSetChanged();
当他们完成下载后,我将Bitmap存储在一个类成员中:名为ICONS[]
的位图数组,我可以直接从ArrayAdapter访问它以节省内存。
有各种各样的检查以确保我不会多次下载图像,所有这些图像都正常工作但无论如何都不适合添加到这里:
注意i
这里是ListView
ICONS[i] = null
的 i
,直到下载并ICONS[i]
成为位图图片。
iconSet[i] = false
i
,直到图像被下载并设置(在适配器内更新),如果ImageView Bitmap
已经设置,这将停止重置{/ 1}。
iconDownloading[i] = false
的 i
,直到AsyncTask
下载程序开始
iconDownloaded[i] = false
的 i
,直到AsyncTask下载程序完成
private class ArticleAdapter extends ArrayAdapter<String>{
private final Context context;
private final String[] values;
public ArticleAdapter(Context context, String[] values) {
super(context, R.layout.list_entry, values);
this.context=context;
this.values=values;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.list_entry,parent,false);
TextView tv = (TextView) rowView.findViewById(R.id.label);
tv.setText(values[position]);
if(ICONS[position]!=null&&!iconSet[position]){//not null and not set
iconSet[position]=true;
System.out.println("ArticleListFragment: Page " + pageIndex + " Setting icon " + position);
ImageView iv = (ImageView) rowView.findViewById(R.id.logo);
iv.setImageBitmap(ICONS[position]);
}else if(!iconDownloading[position]&&!iconDownloaded[position]){
iconDownloading[position]=true;//Starting download
String iconUrl = ARTICLE_LIST.getArticle(position).getThumbnail();
if(iconUrl!=null&&!iconUrl.equals("")){
System.out.println("ArticleListFragment: Page " + pageIndex + " Downloading icon " + position);
new LoadThumbnail(position, iconUrl).execute();
}else{
System.out.println("ArticleFragment: Article " + position + " has no icon");
}
}
//iv.setImageResource(resId);//Change Image - All set to sport at the moment
return rowView;
}
}
我添加了一些System.out调用以及检查所有内容是否按照正确的顺序完成,如下所示:
System.out.println("ArticleListFragment: Page " + pageIndex + " Downloading icon " + position);
先来,然后是:
System.out.println("ArticleListFragment: Page " + pageIndex + " Setting icon " + position);
在Bitmaps的设置之前是正确的,所以它到了正确的位置,使用正确的Bitmap(我假设我已经使用ICONS[position].size()
输出大约4000个字节)所以我卡住了想知道出了什么问题?
修改
我已将问题缩小到检查if(!iconSet[position])
,如果我删除了这个位图正确加载,但每次将另一个位图添加到ICONS数组时会重新加载它们由于某种原因触发if
语句4 2个图标的时间。
为什么要这样做4次? (每行两次)以及为什么检查有所不同?