我正在基于this教程构建自己的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>
的问题。不确定该更改是否出错。
答案 0 :(得分:2)
您将_data
声明为字符串列表(ArrayList<String>
),或许您打算使用MenuItemDetails列表?因为您无法将String转换为MenuItemDetail对象。这些类是无关的。
private ArrayList<MenuItemDetail> _data;
Context _c;
MenuItemAdapter(ArrayList<MenuItemDetail> data, Context c){
_data = data;
_c = c;
}
答案 1 :(得分:0)
该示例的代码存在问题。这是不可能做到的。解决方法是确保您传递的是所使用类型的ArrayList<YourType>
。但是,这会导致尝试将其传递给捆绑包时出现问题,因为只有ArrayLists<String>
可以作为捆绑中的额外内容传递。所以这是最好的,我的解决方案是使用转换器方法将对象转换为ArrayyList<String>
,然后使用另一个构造函数方法从ArrayList<String>
创建该类型。然后,这需要创建一个异常类来捕获从ArrayList<String>
到ArrayList<YourType>
的转换错误,除非你把系统“错误证明”变得粗糙,我对此非常怀疑。
我试图避开这条路线,但这是唯一可行的解决方案。