2014-02-18 4 views
0

Я немного беспомощный на данный момент.Конструктор ArrayAdapter <String> не определен - супер() отмечен

Я следующий код

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 

Но не я определяю это именно так?

Пожалуйста, помогите мне здесь.

ответ

4

при использовании супер, вы должны позвонить по одному из родительского класса, определенных конструкторов

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) 

Таким образом, вы должны позвонить по одному из них

и вы звоните

супер (контекст, textViewResourceId, itemResourceIds, список); то есть 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); 

поскольку в родительском классе никому не goint использовать Это.

В любом случае, если вы собираетесь использовать все самостоятельно, вы можете рассмотреть возможность расширения BaseAdapter вместо ArrayAdaper, так как BaseAdapter не нуждается в каком-либо параметре в конструкторе, и, возможно, вам не нужны какие-либо функции ArrayAdapter.

+0

Спасибо за ответ, но я действительно хотел бы присвоить параметры так, как они есть у меня на данный момент. Нет ли способа сделать это возможным? Например, создав дополнительный конструктор? – Froxx

+0

ваш конструктор в порядке. но если в элементе itemResources у вас есть массив, вам нужно знать, что представляет каждый элемент массива, поэтому вы можете передать родительскому правилу правильный. посмотрите мое обновление –

+1

Прошу прощения, но я до сих пор не понимаю, почему я не могу просто передать массив вместо int. Когда я вызываю свой адаптер, я передаю массив и извлекаю из него все itemResourceIds, которые я использую в getView(). Значит, я не знаю, что представляет собой каждый предмет? – Froxx

0

Это потому, что нет конструктора, который принимает аргументы, которые вы предоставляете. В documentation я не вижу никакого конструктора, соответствующего вашим параметрам (особенно третий параметр, массив)

0

Познакомьтесь с docs. Нет конструктора, который принимает int [] как itemResourceId (без «s»). Конструктор вы, вероятно, ищете это:

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

В коде: "супер (контекст, textViewResourceId, itemResourceIds, список);" «ItemResourceIds» - массив целочисленного несоответствия, т. Е. Не совпадает с каким-либо открытым конструктором в классе ArrayAdapter. Поэтому, пожалуйста, удалите его. И если вам нужно «itemResourceIds», вы можете сохранить в переменную-член. please check this. Если, пожалуйста, опишите цель «itemResourceIds». то я постараюсь помочь.

Смежные вопросы