【问题标题】:Android ArrayAdapter constructor not taking generic objects?Android ArrayAdapter 构造函数不采用通用对象?
【发布时间】:2011-10-27 06:10:22
【问题描述】:

我在使用 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 类覆盖了 Object toString() 方法,正如此处的 ArrayList 文档中所建议的那样:

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

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

【问题讨论】:

    标签: java android autocomplete arraylist


    【解决方案1】:

    类名是ArrayAdapter&lt;T&gt;。并且构造函数签名是ArrayAdapter(Context context, int textViewResourceId, T[] objects)

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

    为了能够将DropdownItemData 的数组传递给它,您的适配器必须是ArrayAdapter&lt;DropdownItemData&gt; 类型。

    您可以将一只狮子放在Cage&lt;Lion&gt; 中,将一只鸟放在Cage&lt;Bird&gt; 中。但是您不能将Cage&lt;Lion&gt; 用于鸟类,也不能将Cage&lt;Bird&gt; 用于狮子。

    您应该阅读generics tutorial

    【讨论】:

    • 实际上,即使我将其更改为 ArrayAdapter 也会出现错误——它仍然需要一个字符串。我会更新我的问题以反映这一点。
    • 确保将变量声明为 ArrayAdapter。 ArrayAdapter 适配器; //... ; adapter = new ArrayAdapter(_context, R.layout.list_item, list_items);
    • ArrayAdapter 与 ArrayAdapter 不同
    猜你喜欢
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多