0

我正在根据教程构建自己的 ListView。

这一行: MessageDetails msg = _data.get(position); 在他的代码中给了我一个问题。我显然收到了这条线的类型错误。我不明白他的代码是如何工作的。我应该做些什么不同的事情,这样我才能让它像他一样工作。

编辑

我知道这条线的问题在于它试图将两种不同的类型放在一起MessageDetails,并且ArrayList<String>. 他的教程没有给我一个好的方法,因为我得到了错误,而他显然没有。

我的适配器类

public class MenuItemAdapter extends BaseAdapter {
    private ArrayList<String> _data;
    Context _c;

    MenuItemAdapter(ArrayList<String> data, Context c){
        _data = data;
        _c = c;
    }
    public int getCount() {
        return _data.size();
    }
    public Object getItem(int position) {
        return _data.get(position);
    }
    public long getItemId(int position) {
        return position;
    }
    public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        if (v == null) {
           LayoutInflater vi = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           v = vi.inflate(R.layout.menuitemrow, null);
        }
        ImageView image = (ImageView) v.findViewById(R.id.MIR_itemImage);
        TextView itemName = (TextView)v.findViewById(R.id.MIR_itemImage);
        TextView itemDescription = (TextView)v.findViewById(R.id.MIR_itemDescription);
        TextView itemPrice = (TextView)v.findViewById(R.id.MIR_itemPrice);
        TextView itemOther = (TextView)v.findViewById(R.id.MIR_itemOther);

        // Create instance of MenuItemDetail and then assign
        MenuItemDetail mid = _data.get(position);
        image.setImageResource(mid.icon);
        itemName.setText(mid.itemName);
        itemDescription.setText(mid.itemDescription);
        itemPrice.setText(mid.itemPrice);
        itemOther.setText(mid.itemOther);
        return v;
    }

}

这是我的MenuItemDetail课程,与他的课程非常相似,只是我的领域。

public class MenuItemDetail {

    int icon;
    String itemName;
    String itemDescription;
    String itemPrice;
    String itemOther;



    public int getIcon() {
        return icon;
    }
    public void setIcon(int icon) {
        this.icon = icon;
    }
    public String getItemName() {
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
    public String getItemDescription() {
        return itemDescription;
    }
    public void setItemDescription(String itemDescription) {
        this.itemDescription = itemDescription;
    }
    public String getItemPrice() {
        return itemPrice;
    }
    public void setItemPrice(String itemPrice) {
        this.itemPrice = itemPrice;
    }
    public String getItemOther() {
        return itemOther;
    }
    public void setItemOther(String itemOther) {
        this.itemOther = itemOther;
    }


}

任何帮助和解释将不胜感激。

我还必须ArrayList在需要ArrayList<String>. 不确定该更改是否是错误的地方。

4

2 回答 2

2

您声明_data为字符串列表 ( ArrayList<String>),也许您打算使用 MenuItemDetails 列表?由于您无法将 String 转换为 MenuItemDetail 对象。这些类是不相关的。

private ArrayList<MenuItemDetail> _data;
Context _c;

MenuItemAdapter(ArrayList<MenuItemDetail> data, Context c){
    _data = data;
    _c = c;
}
于 2013-02-23T21:45:03.703 回答
0

该示例的代码存在问题。这是无法做到的。解决方法是确保您将其传递给ArrayList<YourType>您正在使用的类型。但是,这会导致尝试通过捆绑包传递它时出现问题,因为它只能ArrayLists<String>作为捆绑包中的额外内容传递。所以这是最好的,我的解决方案是创建一个转换器方法将对象转换为一个ArrayyList<String>,然后另一个构造函数方法从ArrayList<String>. 然后,这需要创建一个异常类来捕获从转换到的错误,ArrayList<String>除非ArrayList<YourType>您已经使系统“防错”,我对此高度怀疑。

我试图避免这条路线,但这是唯一可行的解​​决方案。

于 2013-02-24T16:31:15.583 回答