【问题标题】:The constructor ArrayAdapter<String> is undefined - super() marked构造函数 ArrayAdapter<String> 未定义 - 标记为 super()
【发布时间】:2014-02-18 16:14:51
【问题描述】:

我现在有点无助。

我有以下代码

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 标记了 super(...) 行,我不知道为什么。

它告诉我:

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

但我不是这样定义的吗?

请帮帮我。

【问题讨论】:

    标签: android undefined adapter android-arrayadapter super


    【解决方案1】:

    当你使用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) 并且不存在。

    itemResourceIds 应该是一个 int,而不是一个 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的任何功能。

    【讨论】:

    • 感谢您的回答,但我真的很想以目前的方式掌握参数。有没有办法使这成为可能?例如,通过制作一个额外的构造函数?
    • 你的构造函数没问题。但是如果在 itemResources ids 中你有一个数组,你需要知道数组的每个项目代表什么,这样你就可以将正确的传递给父项, .看看我的更新
    • 对不起,但我仍然不明白为什么我不能简单地传递一个数组而不是一个 int。当我调用我的适配器时,我传递数组并从中获取我在 getView() 中使用的所有 itemResourceId。所以我不知道每个项目代表什么?
    • 父类只需要一个唯一的字段,对于视图中的所有项目都是一样的。这就是为什么super() 需要int 而不是array。你可以保留你的构造函数,因为你正在实现你自己的getView,所以你传递给父级的id并不重要,所以你可以简单地将它更改为super(context,0, list); ,因为没有人会在super中使用那个id。
    • 哦,超级不能连接到我的承包商?嗯,这改变了一切。我认为你需要在那里有相同的参数。非常感谢您的耐心和非常详细的回答! :) (代码工作顺便说一句)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        查看文档:http://developer.android.com/reference/android/widget/ArrayAdapter.html

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

        super(context, textViewResourceId, list);
        

        【讨论】:

          【解决方案5】:

          在您的代码中: “超级(上下文,textViewResourceId,itemResourceIds,列表);” “itemResourceIds”数组的整数不匹配,即与 ArrayAdapter 类中的任何公共构造函数不匹配。 所以请删除它。如果您需要“itemResourceIds”,您可以将其存储到成员变量中。 please check this。 如果请描述“itemResourceIds”的用途。那我会尽力帮忙的。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-04
            • 2020-03-22
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多