Подтвердить что ты не робот

Как правильно перезаписать методы 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) {

}

Кто-нибудь знает, что мне нужно кодировать в каждом из этих методов?

4b9b3361

Ответ 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();
}