使用Android从URL动态更新图像

时间:2010-08-17 20:29:12

标签: android listview rss adapter imageview

所以我有这个程序在http://www.muttville.org/mutts/feed抓取RSS提要并显示可用狗的列表,基本上填写ListView中的每个项目,左边是狗的图像,标题是右边的狗。

我的应用程序执行并抓取并解析XML Feed。 onCreate,它将图像URL存储为每个项目中的字符串。我有一个RSSFeed数据结构,它基本上是一个RSSItem对象的数组。问题在于弄清楚如何异步更新图像。

我有一个imageDownloader,我实际上从谷歌的Android开发博客那里获得了更新图像并存储它们,但预加载时间非常长。我宁愿立即开始显示这些项目,并在我得到它们时更新图像。令人讨厌的是,listview最初也非常无响应地滚动,调用我的imageDownloader再次检索项目。有没有什么方法可以让ImageViews只是在RSSItem中抓取一个指向ImageView对象的指针,然后只更新它?

我对Android开发很新,所以很有可能我没有意识到基本的东西。这是我的适配器代码:

私有类FeedItemAdapter扩展了ArrayAdapter {

    private List<RSSItem> items;

    public FeedItemAdapter(Context context, int textViewResourceId, List<RSSItem> items) {
        super(context, textViewResourceId, items);
            this.items = items;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
            View v = convertView;
            if (v == null) {
                LayoutInflater vi = 
                    (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                v = vi.inflate(R.layout.displayitem, null);
            }

            RSSItem o = items.get(position);
            if (o != null) {
                    ImageView tt = (ImageView) v.findViewById(R.id.leftimage);
                    TextView bt = (TextView) v.findViewById(R.id.righttext);
                    if (tt != null) {   
                        //get image from url string
                        imageDownloader.download(o.getImageString(), tt);
                    }
                    if(bt != null){
                          bt.setText(feed.getItem(position).getTitle());
                    }
            }
            return v;
    }


}

1 个答案:

答案 0 :(得分:0)

创建一个继承ImageView的新类,默认显示“挂起”图像,并具有一个从另一个线程中的网络开始加载的函数。完成后,更新图像。