Java 创建自定义适配器类以避免自定义listview

Java 创建自定义适配器类以避免自定义listview,java,android,android-arrayadapter,Java,Android,Android Arrayadapter,我正在根据教程的内容构建自己的ListView 这一行: MessageDetails msg=\u data.get(位置) 他的密码给了我一个问题。很明显,这一行有一个类型错误。我不明白他的代码是怎么工作的。我应该怎样做才能让它像他的一样工作 编辑 我知道这一行的问题在于它试图将两种不同的类型放在一起MessageDetails和ArrayList。他的教程没有给我一个好的方法,因为我得到了错误,他显然没有 我的适配器类 public class MenuItemAdapter extend

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

这一行:
MessageDetails msg=\u data.get(位置)
他的密码给了我一个问题。很明显,这一行有一个类型错误。我不明白他的代码是怎么工作的。我应该怎样做才能让它像他的一样工作

编辑

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

我的适配器类

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

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


我还必须修复
ArrayList
问题,以及它需要
ArrayList
的地方。不确定这一变化是否出了问题

您将
\u data
声明为字符串列表(
ArrayList
),可能是想使用MenuItemDetails列表?因为无法将字符串转换为MenuItemDetail对象。这些课程是不相关的

private ArrayList<MenuItemDetail> _data;
Context _c;

MenuItemAdapter(ArrayList<MenuItemDetail> data, Context c){
    _data = data;
    _c = c;
}
private ArrayList\u数据;
语境;
MenuItemAdapter(ArrayList数据,上下文c){
_数据=数据;
_c=c;
}

示例的代码有问题。这是不可能做到的。解决方法是确保向其传递所使用类型的
ArrayList
。但是,这会导致尝试通过捆绑包传递它时出现问题,因为只有
ArrayLists
可以作为捆绑包中的额外文件传递。因此,最好的解决方案是使用一个转换器方法将对象转换为
ArrayList
,然后使用另一个构造函数方法从
ArrayList
创建该类型。这就需要创建一个异常类来捕获从
ArrayList
ArrayList
的转换过程中的错误,除非您已经对系统进行了“错误证明”,我对此深表怀疑


我试图避开这条路线,但这是唯一可行的解决办法

你把我弄糊涂了。您正在混淆您的类
MenuItemDetail
和教程类
MessageDetail
,请仔细检查这不是您的问题。否则,我对如何将简单字符串转换为MenuItemDetail对象感到困惑。正如我前面所说的,没有理由不能使用JSON创建MenuItemDetails列表。从长远来看,这是你最好的方法。它们之所以不同,只是因为我自己在做。我会给这个想法一些牵引力
private ArrayList<MenuItemDetail> _data;
Context _c;

MenuItemAdapter(ArrayList<MenuItemDetail> data, Context c){
    _data = data;
    _c = c;
}