Как правильно переписать методы SpinnerAdapter - PullRequest
17 голосов
/ 18 июня 2010

Я использую 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) {

}

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

Ответы [ 3 ]

39 голосов
/ 19 июня 2010

Спасибо за ответы, но, тем не менее, я хочу поделиться с вами решением, которое я использовал после поиска дополнительных ссылок:

Вместо того, чтобы просто реализовывать 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 голосов
/ 18 июня 2010

Самый важный метод, если getDropDownView (). Это создает экземпляр View для отображения данных с выбранным идентификатором. arg1 - это преобразованное представление, существующее представление, которое может быть изменено и возвращено функцией, чтобы не нужно было создавать совершенно новое представление каждый раз, когда пользователь выбирает индекс данных. arg2 - родительская ViewGroup, в которую следует поместить созданный (или преобразованный) View.

Другие методы наследуются от класса Adapter, и их реализация действительно может быть понята только в этом контексте. Их использование задокументировано здесь .

1 голос
/ 03 января 2013

Посмотрите на источники 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();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...