Конструктор ArrayAdapter<String> не определен - отмечен 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...
}
}
Но затмение отмечает супер (...) линию, и я не могу понять, почему.
Это говорит мне:
The constructor ArrayAdapter<String>(Context, int, int[], ArrayList<String>) is undefined
Но разве я не определил это именно так?
Пожалуйста, помогите мне здесь.
5 ответов
Когда вы используете super, вы должны вызвать один из конструкторов, определенных родительским классом
ArrayAdapter, как вы можете видеть здесь, имеет следующие доступные конструкторы:
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, а затем идентификатор текстового поля.
и это
ArrayAdapter(Context context, int resource, List<T> objects)
получает только идентификатор файла XML
возможно, вы захотите просто позвонить
super(context, itemResourceIds[0],textViewResourceId, list);
или просто
super(context, itemResourceIds[0], list);
но это зависит от того, что содержание itemResourceIds
на самом деле
Если вы реализуете весь адаптер, вас не волнует, какой идентификатор вы передаете родителю, поэтому вы можете просто изменить его на
super(context, 0, list);
так как в родительском классе никто не собирается его использовать.
В любом случае, если вы собираетесь все реализовать самостоятельно, вы можете рассмотреть вопрос о расширении BaseAdapter
вместо ArrayAdaper
поскольку BaseAdapter не требует каких-либо параметров в конструкторе, и, вероятно, вам не нужны какие-либо функции ArrayAdapter.
Это потому, что нет конструктора, который принимает аргументы, которые вы предоставляете. В документации я не вижу ни одного конструктора, соответствующего вашим параметрам (особенно третий параметр, массив)
Посмотрите документацию: http://developer.android.com/reference/android/widget/ArrayAdapter.html
В классе нет Конструктора ArrayAdapter
это занимает int[]
в качестве третьего параметра попробуйте:
super(context, textViewResourceId, list);
В вашем коде: "super(context, textViewResourceId, itemResourceIds, list);" "ItemResourceIds" массив целочисленного несоответствия, т. Е. Не соответствует ни одному общедоступному конструктору, защищающемуся в классе ArrayAdapter. Поэтому, пожалуйста, удалите его. И если вам нужны "itemResourceIds", вы можете сохранить их в переменной-члене. пожалуйста, проверьте это. Пожалуйста, опишите цель "itemResourceIds". тогда я постараюсь помочь.
Внимательно посмотрите на документы. Нет конструктора, который принимает int[] как itemResourceId (без "s"). Конструктор, который вы, вероятно, ищете, это:
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)