Как правильно перезаписать методы SpinnerAdapter
Im использует SpinnerAdapter для отображения Spinner. Для этого я определил класс, который реализует SpinnerAdapter. К сожалению, я не знаю, как переопределить некоторые методы SpinnerAdapter:
@Override
public View getDropDownView(int position, View arg1, ViewGroup arg2) {
}
@Override
public int getItemViewType(int arg0) {
}
@Override
public boolean hasStableIds() {
}
@Override
public void registerDataSetObserver(DataSetObserver arg0) {
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
}
Кто-нибудь знает, что мне нужно кодировать в каждом из этих методов?
Ответы
Ответ 1
Спасибо за ответы, но тем не менее я хочу поделиться с вами решением, которое я использовал после поиска дополнительных ссылок:
Вместо того, чтобы просто внедрять SpinnerAdapter в моем адаптере, я расширяю BaseAdapter и реализую SpinnerAdapter:
private class ListAdapter extends BaseAdapter implements SpinnerAdapter {
@Override
public int getCount() {
return allLists.size();
}
@Override
public Object getItem(int position) {
return allLists.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
TextView text = new TextView(lexs);
text.setText(allLists.get(position).getName());
return text;
}
}
Тогда нет необходимости переопределять все эти странные методы, такие как isEmpty(), registerDataObserver() и т.д.
И если необходимо, все равно можно переопределить getDropDownView (...)
Кроме того, с помощью этого решения можно вызвать adapter.notifyDatasetChanged(), что не так просто, если адаптер просто реализует SpinnerAdapter и не расширяет BaseAdapter.
Ответ 2
Самый важный метод, если getDropDownView(). Это создает экземпляр View для отображения данных по выбранному идентификатору. arg1 - это конвертированный вид, существующий вид, который может быть изменен и возвращен функцией, чтобы не создавать абсолютно новый вид каждый раз, когда пользователь выбирает индекс данных. arg2 является родительской ViewGroup, в которую должен быть помещен созданный (или преобразованный) вид.
Другие методы наследуются от класса Adapter, и их реализация может быть понятна только в этом контексте. Их использование документировано здесь.
Ответ 3
Посмотрите на источники BaseAdapter. Вам просто нужно добавить эти строки в свою собственную реализацию ListAdapter или SpinnerAdapter.
private final DataSetObservable mDataSetObservable = new DataSetObservable();
@Override
public void registerDataSetObserver(DataSetObserver observer) {
mDataSetObservable.registerObserver(observer);
}
@Override
public void unregisterDataSetObserver(DataSetObserver observer) {
mDataSetObservable.unregisterObserver(observer);
}
/**
* Notifies the attached observers that the underlying data has been changed
* and any View reflecting the data set should refresh itself.
*/
public void notifyDataSetChanged() {
mDataSetObservable.notifyChanged();
}