Android:ArrayAdapter没有正确设置图像

时间:2013-08-27 17:17:31

标签: android image listview bitmap

在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次? (每行两次)以及为什么检查有所不同?

0 个答案:

没有答案