解决方案位于底部:
我创建了一些我想在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 ....
}
答案 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。