发现不兼容的类型 java.lang:ArrayAdapter

Incompatible types found java.lang : ArrayAdapter

当我尝试下面的代码行时

ItemRow itemdata = data.get(position);

在 ItemAdapter class 我得到了错误

需要不兼容的类型:com.fragment.ItemRow 发现:java.lang.object

完整的ItemRow.javaclass如下:

Package com.fragments;

import android.graphics.drawable.Drawable;

public class ItemRow {

String itemName;
Drawable icon;

public ItemRow(String itemName, Drawable icon) {
    super();
    this.itemName = itemName;
    this.icon = icon;
}

public String getItemName() {
    return itemName;
}
public void setItemName(String itemName) {
    this.itemName = itemName;
}
public Drawable getIcon() {
    return icon;
}
public void setIcon(Drawable icon) {
    this.icon = icon;
}

}

和完整的 Itemadapeter class,其中我在尝试

时得到了不兼容的类型

-ItemRow itemdata = data.get(position);在 getView

package com.fragments;
public class ItemAdapter extends ArrayAdapter {

List   data;
Context context;
int layoutResID;

public ItemAdapter(Context context, int layoutResourceId,List data) {
    super(context, layoutResourceId, data);

    this.data=data;
    this.context=context;
    this.layoutResID=layoutResourceId;

    // TODO Auto-generated constructor stub
 }

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

    NewsHolder holder = null;
    View row = convertView;
    holder = null;

    if(row == null)
    {
        LayoutInflater inflater = ((Activity)context).getLayoutInflater();
        row = inflater.inflate(layoutResID, parent, false);

        holder = new NewsHolder();

        holder.itemName = (TextView)row.findViewById(R.id.example_itemname);
        holder.icon=(ImageView)row.findViewById(R.id.example_image);
        holder.button1=(Button)row.findViewById(R.id.swipe_button1);
        holder.button2=(Button)row.findViewById(R.id.swipe_button2);
        holder.button3=(Button)row.findViewById(R.id.swipe_button3);
        row.setTag(holder);
    }
    else
    {
        holder = (NewsHolder)row.getTag();
    }

    ItemRow itemdata = data.get(position);


    holder.itemName.setText(itemdata.getItemName());
    holder.icon.setImageDrawable(itemdata.getIcon());

    holder.button1.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(context, "Button 1 Clicked",Toast.LENGTH_SHORT).show();
        }
    });

    holder.button2.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(context, "Button 2 Clicked",Toast.LENGTH_SHORT).show();
        }
    });

    holder.button3.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            Toast.makeText(context, "Button 3 Clicked",Toast.LENGTH_SHORT);
        }
    });

    return row;

}

static class NewsHolder{

    TextView itemName;
    ImageView icon;
    Button button1;
    Button button2;
    Button button3;
}

}

你的列表是 raw type 意思是 Object 所以你必须将 Object 向下转换为你的 POJO 即 ItemRow

ItemRow itemdata = (ItemRow )data.get(position);

或者你应该有一个 List<ItemRow> 类型的列表,因为不知道你要传递给这个适配器的是哪种列表,所以确保你传递的类型与 List<ItemRow> 相同case plus 为了遵循最佳实践,将带有适配器的类型提及为 extends ArrayAdapter<ItemRow> 并在其他地方进行所需的更改。

请使用 List<ItemRow> 而不是 List

问题是由您的 ItemAdapter

中的以下作业引起的
List data;

相反,试试这个

ArrayList<ItemRow> data;