我遇到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的构造函数应该只是一个通用列表 - 所以我不明白错误是抱怨什么。
答案 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。