0

我知道这已经解决了一百万次,是的,我已经搜索过了,但它对我不起作用。

问题是方法super不需要正确的参数。

编码:

public class QuotesArrayAdapter extends ArrayAdapter<Map<Integer,List<String>>> {
private Context context;
Map<Integer,List<String>> Values;
static int textViewResId;
Logger Logger;

public QuotesArrayAdapter(Context context, int textViewResourceId, Map<Integer,List<String>> object) {
    super(context, textViewResourceId, object);   //<---- ERROR HERE
    this.context = context;
    this.Values = object;
    Logger = new Logger(true);
    Logger.l(Logger.TAG_DBG, "ArrayAdapter Inited");
}

什么 Eclipse 说:

Multiple markers at this line
- The constructor ArrayAdapter<Map<Integer,List<String>>>(Context, int, Map<Integer,List<String>>) 
 is undefined
- The constructor ArrayAdapter<Map<Integer,List<String>>>(Context, int, Map<Integer,List<String>>) 
 is undefined

它想要super(Context, int)而这不是我想要的

4

3 回答 3

5

查看可用于ArrayAdapter.

ArrayAdapter(Context context, int textViewResourceId)
ArrayAdapter(Context context, int resource, int textViewResourceId)
ArrayAdapter(Context context, int textViewResourceId, T[] objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

这些都不符合你的论点。

你打算调用哪一个?您的There is Map<Integer,List<String>>,但您的构造函数的object参数正是该类型。如果您想使用需要集合的构造函数之一,则需要从您拥有的单个对象构建该集合。

最简单的方法可能只是使用:

public QuotesArrayAdapter(Context context, int textViewResourceId,
                          Map<Integer,List<String>> object) {
    super(context, textViewResourceId);
    add(object);
    ...
}
于 2012-11-17T22:49:24.273 回答
1

很简单,在ArrayAdapter中没有构造函数接受 Map ...

您需要将其转换为列表或原始数组,如果这些选项都不起作用,那么您将不得不扩展BaseAdapter

于 2012-11-17T22:50:20.297 回答
1

此外,您可以使用Arrays.asList(..)

public QuotesArrayAdapter(Context context, int textViewResourceId, Map<Integer,List<String>> object) {
    super(context, textViewResourceId,  Arrays.asList(object));   
.... 
于 2012-11-17T22:58:34.563 回答