2011-10-27 85 views
1

我遇到了Android自动完成下拉菜单的问题。我正在尝试将自定义对象传递给一个新的ArrayAdapter,然后将其用于下拉菜单中的数据。不过,我发现了以下错误此行的代码:Android 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类覆盖了对象的toString()方法,如ArrayList的文档h的建议ERE:

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

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

回答

7

类名是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

+0

实际上,即使将其更改为ArrayAdapter ,我也会得到一个错误 - 它仍然需要一个字符串。我会更新我的问题以反映这一点。 – DashRantic

+1

确保将变量*声明为ArrayAdapter 。 ArrayAdapter 适配器; // ...; adapter = new ArrayAdapter (_ context,R.layout.list_item,list_items); –

+1

ArrayAdapter 与ArrayAdapter 不相同 – josephus

相关问题