我怎么能改变ListView里面的图像?

时间:2011-07-16 18:44:50

标签: android image listview

我读了另外的帖子,但我找不到适合我的解决方案。我创建了一个自定义 ListView 。此列表中的每个项目都是复杂项目,包含 ImageView 以及两个 TextViews 。应用适配器并填充列表后,我想更改 ImageView 中的图像,但我希望这不会发生在点击事件上。

private class ListAdapter extends ArrayAdapter<RSSItem> {

    private List<RSSItem> items;

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

    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.list_item, null);
        }
        RSSItem item = items.get(position);
        if (item != null) {
            ImageView image = (ImageView) v.findViewById(R.id.ivImage);
            TextView title = (TextView) v.findViewById(R.id.tvTitle);
            TextView description = (TextView) v.findViewById(R.id.tvDescription);
            if (image != null) {
                Drawable d = getResources().getDrawable(R.drawable.icon);
                image.setTag(item.getImageURL());
                image.setBackgroundDrawable(d);
            }
            if (title != null) {
                title.setText(item.getTitle());
            }
            if (description != null) {
                description.setText(item.toString());
            }
        }
        return v;
    }
}

我试图获取Context,但后来我不知道如何访问正确的 ImageView 。 我感谢任何帮助!

3 个答案:

答案 0 :(得分:3)

RSSItem类中添加一个字段,告诉适配器要显示哪个图像。在AsyncTask.onPostExecute方法中更改该值,然后调用notifyDataSetChanged的{​​{1}}方法。

您的ArrayAdapter覆盖应使用您在RSSItem中放置的值来选择要显示的图像。当您拨打getView()时,会为每个项目再次调用它。

答案 1 :(得分:2)

在ArrayAdapter中延迟加载图片

网上有很棒的教程,展示了如何执行此操作的完整代码示例,还包括缓存,因此您不会多次下载图像。

另外还有一个由谷歌工程师编写的SHELVES安卓应用程序免费开源应用程序,它还提供了多线程,延迟加载和数据缓存图像缓存的示例。我高度建议您仔细阅读此代码。

答案 2 :(得分:1)

如果要从适配器的getView()函数外部更改imageview,可以尝试此操作。

List<View> listOfViews = new ArrayList<View>();
listView1.reclaimViews(listOfViews);
for (View v : listOfViews)
{
    ImageView image = (ImageView)v.findViewById(R.id.image);
    image.setBackgroundDrawable(drawable);
}