构造函数ArrayAdapter <string>未定义 - super()标记为</string>

时间:2014-02-18 16:14:52

标签: android undefined adapter android-arrayadapter super

此刻我有点无助。

我有以下代码

public class ListViewAdapter<String> extends ArrayAdapter<String> {
private final Context context;
private final int textViewResourceId;
private final int[] itemResourceIds;
private final ArrayList<String> list;

public ListViewAdapter(Context context, int textViewResourceId,
    int[] itemResourceIds, ArrayList<String> list) {
        super(context, textViewResourceId, itemResourceIds, list);
        this.context = context;
        this.textViewResourceId = textViewResourceId;
        this.itemResourceIds = itemResourceIds;
        this.list = list;
    }

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // some code...
}
}

但是eclipse标志着超级(...)线,我无法弄明白为什么。

它告诉我:

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

但是我不是这样定义的吗?

请帮帮我。

5 个答案:

答案 0 :(得分:4)

当你使用super时,你必须调用父类定义的构造函数之一

ArrayAdapter,正如您所见here,有这个可用的构造函数:

ArrayAdapter(Context context, int resource)

ArrayAdapter(Context context, int resource, int textViewResourceId)

ArrayAdapter(Context context, int resource, String[] objects)

ArrayAdapter(Context context, int resource, int textViewResourceId, String[] objects)

ArrayAdapter(Context context, int resource, List<String> objects)

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

所以你必须打电话给其中一个

你打电话

super(context,textViewResourceId,itemResourceIds,list);那是   ArrayAdapter(Context,int,int [],ArrayList)并且不存在。

而不是int数组,itemResourceIds应该是int。

如何修复它取决于itemResources [];

的内容 认为这是:

ArrayAdapter(Context context, int resource,  int textViewResourceId, List<String> objects)

接收xml布局文件的id,然后接收文本字段的id。

和这个

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

只接收xml文件的id

可能你可能只想打电话

 super(context, itemResourceIds[0],textViewResourceId,  list); 

或只是

 super(context, itemResourceIds[0], list); 

但这取决于itemResourceIds的实际内容。

如果你正在实现整个适配器,你真的不关心你传递给父母的id,所以你可以简单地将它改为

 super(context, 0, list); 

因为在父类中没有人会使用它。

无论如何,如果你想自己实现一切,你可以考虑扩展BaseAdapter而不是ArrayAdaper,因为BaseAdapter在构造函数中不需要任何参数,可能你不需要任何功能ArrayAdapter。

答案 1 :(得分:0)

那是因为没有构造函数接受你提供的参数。在documentation中,我没有看到任何与您的参数匹配的构造函数(尤其是第三个参数,数组)

答案 2 :(得分:0)

仔细查看docs。没有构造函数接受int []作为itemResourceId(没有“s”)。 您可能正在寻找的构造函数是:

public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)

答案 3 :(得分:0)

查看文档:{​​{3}}

ArrayAdapter中没有构造函数将int[]作为第三个参数,请尝试使用:

super(context, textViewResourceId, list);

答案 4 :(得分:0)

在你的代码中: “super(context,textViewResourceId,itemResourceIds,list);” “itemResourceIds”是整数不匹配的数组,即与ArrayAdapter类中的任何公共构造函数defiend都不匹配。 所以请删除它。如果您需要“itemResourceIds”,您可以存储到成员变量中。 please check this。 如果请描述“itemResourceIds”的目的。然后我会尽力帮忙。