Android ArrayAdapter构造函数不带通用对象?

时间:2011-10-27 06:10:22

标签: java android autocomplete arraylist

我遇到Android AutoComplete下拉菜单问题。我正在尝试将自定义对象传递给新的ArrayAdapter,然后将其用于下拉菜单中的数据。但是,我在这行代码中遇到以下错误:

adapter = new ArrayAdapter<String>(_context, R.layout.list_item, list_items);

The constructor ArrayAdapter<String>(Context, int, DropdownItemData[]) is undefined

我也尝试过运行它,它会输出一个类型不匹配错误:

adapter = new ArrayAdapter<DropdownItemData>(_context, R.layout.list_item, list_items);

Type mismatch: cannot convert from ArrayAdapter<DropdownItemData> to ArrayAdapter<String>

但是,以下 可以正常工作:

String[] test_list = new String[] {"some", "test", "data"};
adapter = new ArrayAdapter<String>(_context, R.layout.list_item, test_list);

我的DropdownItemData类重写了Object toString()方法,这在ArrayList文档中建议:

http://developer.android.com/reference/android/widget/ArrayAdapter.html

有谁知道问题是什么/我错过了什么?根据文档,我试图用于ArrayList的构造函数应该只是一个通用列表 - 所以我不明白错误是抱怨什么。

1 个答案:

答案 0 :(得分:8)

班级名称为ArrayAdapter<T>。构造函数签名是ArrayAdapter(Context context, int textViewResourceId, T[] objects)

因此,如果将变量声明为ArrayAdapter<String>,则必须传递String数组作为构造函数的最后一个参数。

为了能够传递DropdownItemData数组,您的适配器必须是ArrayAdapter<DropdownItemData>类型。

你可以将狮子放在Cage<Lion>中,将鸟放在Cage<Bird>中。但是你可能不会使用Cage<Lion>与鸟类,也不会使用Cage<Bird>与狮子。

您应该阅读generics tutorial