发现不兼容的类型 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;
当我尝试下面的代码行时
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;