0

我想创建一个自定义ListView使用ArrayAdapter。 POJO Item类:ListView中的ImageView与自定义ArrayAdapter

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; 
    } 

} 

这里自定义阵列适配器的外观like.It如下图所示:

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的默认图像,并且应该根据此更改我在运行时从互联网上提供数组。

回答

3

您正尝试将图像(图片)分配给一个ImageView对象。 在你Item类,而不是一个ImageView你可以存储id(如R.drawable.some_name)图像的该特定项目的对象为int(如R.drawable.btn_bg_presse d),然后在你的getView()方法分配将是:

list_image.setImageResource(p.getImageId()) 

其中方法getImageId()(从类项目)会是这样的:

private int itemImageId; 

public int getImageId() { 
    return itemImageId; 
} 
+0

图像具有动态改变,但是从本地文件夹绘制直到其加载显示默认图像。你能显示我可以在代码中分配这个图像吗? –

+0

@HarshaMV我不认为我理解你的问题。在您的自定义行布局'R.layout.list_item_default'中,您有一个'ImageView'。你有没有尝试像这样设置属性'src'到你的'ImageView':'android:src =“@ drawable/some_drawable”'这样你的ImageView就已经有了图片? – Luksprog

+0

是的,我已经做到了这一点,以获得默认图像。现在,当我提供一个数组时,图像视图应该显示来自所提到URL的图像。我有4个字段 - 3个文本视图,其中1个是图像视图。 –

相关问题