具有自定义子类对象的数组适配器

时间:2013-12-29 23:40:13

标签: java android android-listview android-adapter

解决方案位于底部:

我创建了一些我想在listview中使用的类。 它们看起来像这样:

public class Equipment{
       ....code....
}

public class Weapon extends Equipment{
        ...More code...
}

public class Armor extends Equipment{
        ...More code...
}

你可以看到武器和装甲扩展了装备。现在我想在同一个ArrayAdapter中使用theese类。在我的想象中,这很简单:

public class ShopItemAdapter extends ArrayAdapter<Equipment>{
private List<Equipment> itemList;
    public ShopItemAdapter(Context context, List<Equipment> itemList) {
    super(context, android.R.layout.simple_list_item_1, itemList);
    this.itemList = itemList;
    this.context = context;
    }
     .... CODE ....
}

但出于某种原因,我可能无法创建具有列表武器或列表装甲的ArrayAdapter装备。

ShopItemAdapter adapter = new ShopItemAdapter(getApplicationContext(), weaponList);

此代码给出了ShopItemAdapter(Context,List)未定义的错误

我是以错误的方式使用子类还是什么?

我的目标是在点击按钮和viseversa时显示一个装甲列表。

希望我的问题很清楚。谢谢!

解决方案** 所以我只需要更改构造函数以接收然后在超级构造函数中转换为List。

public class ShopItemAdapter extends ArrayAdapter<Equipment>{
private List<Equipment> itemList;
    public ShopItemAdapter(Context context, List<? extends Equipment> itemList) {
    super(context, android.R.layout.simple_list_item_1, (List<Equipment>)itemList);
    this.itemList = (List<Equipment>)itemList;
    this.context = context;
    }
     .... CODE ....
}

2 个答案:

答案 0 :(得分:1)

  

创建适配器时,我收到错误“构造函数ShopItemAdapter(Context,List)未定义。是否需要为每个List类型创建构造函数?看起来很奇怪,因为Weapon扩展了Equipment。:(

不,但您需要指定Equipment的任何子类也可以:

public ShopItemAdapter(Context context, List<? extends Equipment> itemList) {

?是Java泛型中的通配符,? extends A使其绑定到A或其子类。

答案 1 :(得分:0)

您的想法很好,但您还必须覆盖getView()并在那里填充您的布局。默认情况下,ArrayAdapter用于填充单个TextView。