【问题标题】:ImageView in ListView with custom ArrayAdapterListView 中的 ImageView 与自定义 ArrayAdapter
【发布时间】:2011-11-20 10:00:44
【问题描述】:

我正在尝试使用 ArrayAdapter 创建自定义 ListView。 POJOItem类:

public class Item {

    String itemTitle = "", itemTimestamp = "", itemDescription = "";
    ImageView itemImage;

    public String getTitle() {
        return itemTitle;
    }

    public String getDescription() {
        return itemDescription;
    }

    public String getTimeStamp() {
        return itemTimestamp;
    }

    public ImageView getImage() {
        return itemImage;
    }

    public Item(String itemTitle, String itemTimestamp, String itemDescription,
            ImageView itemImage) {
        super();
        this.itemTitle = itemTitle;
        this.itemDescription = itemDescription;
        this.itemTimestamp = itemTimestamp;
        this.itemImage = itemImage;
    }

    public void setItemTitle(String title) {
        itemTitle = title;
    }

    public void setItemTimestamp(String timestamp) {
        itemTimestamp = timestamp;
    }

    public void setItemDescription(String itemDesc) {
        itemDescription = itemDesc;
    }

    public void setItemImage(ImageView image) {
        itemImage = image;
    }

}

以及自定义数组适配器的外观。如下图所示:

public class ListAdapter extends ArrayAdapter<Item> {

    public ListAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
        // TODO Auto-generated constructor stub
    }

    private List<Item> items;

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    if (v == null) {
        LayoutInflater vi;
        vi = LayoutInflater.from(getContext());
        v = vi.inflate(R.layout.list_item_default, null);
    }

    Item p = items.get(position);

    if (p != null) {

        TextView list_title = (TextView) v.findViewById(R.id.list_title);
        TextView list_description = (TextView) v.findViewById(R.id.list_description);
        TextView list_timestamp = (TextView) v
                .findViewById(R.id.list_timestamp);
        ImageView list_image = (ImageView) v.findViewById(R.id.list_image);

        if (list_title != null) {
            list_title.setText(p.getTitle());
        }

        if (list_description != null) {
            list_description.setText(p.getDescription());
        }

        if (list_timestamp != null) {
            list_timestamp.setText(p.getTimeStamp());
        }

        if (list_image != null) {
            list_image.setImageResource(p.getImage(R.drawable.btn_bg_pressed));
        }
    }

    return v;
}

}

错误:

The method setImageResource(int) in the type ImageView is not applicable for the arguments (ImageView)

我不知道如何为ListView 设置默认图像,这应该会根据我在运行时从互联网提供的数组而改变。

【问题讨论】:

    标签: android android-listview android-arrayadapter android-imageview


    【解决方案1】:

    您正在尝试将ImageView 对象指定为图像(图片)。 在Item 类而不是ImageView 中,您可以将特定项目对象的图像的id(如R.drawable.some_name)存储为int(如R.drawable.btn_bg_pressed),然后在你的@ 987654328@方法分配将是:

    list_image.setImageResource(p.getImageId())
    

    方法 getImageId()(from class Item) 应该是这样的:

    private int itemImageId;
    
    public int getImageId() {
       return itemImageId;
    } 
    

    【讨论】:

    • 图像必须动态更改,但在加载之前显示本地可绘制文件夹中的默认图像。你能告诉我我可以在代码中分配这个图像吗?
    • @HarshaMV 我不认为我理解你的问题。在您的自定义行布局R.layout.list_item_default 中,您有一个ImageView。您是否尝试将属性src 设置为您的ImageView,如下所示:android:src="@drawable/some_drawable" 这样您的 ImageView 已经有图片了吗?
    • 是的,我这样做是为了获得默认图像。现在,当我提供一个数组时,图像视图应该显示来自提到的 URL 的图像。我有 4 个字段 - 3 个文本视图,其中 1 个是图像视图。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多