Нужна помощь с пользовательской настройкой Spinner / ArrayAdapter - PullRequest
0 голосов
/ 29 декабря 2010

РЕДАКТИРОВАТЬ: Пожалуйста, проигнорируйте этот вопрос - мне удалось решить его таким образом, который прекрасно работает для того, что мне нужно (см. Мой собственный ответ ниже).

У меня есть класс WeatherSpinner, который расширяет Spinner. Класс показывает имена регионов, которые я изначально использовал, используя ArrayAdapter<String>, но теперь я хочу использовать ArrayAdapter<Locale> (Locale - мой собственный абстрактный «пустой» класс).

Я получаю ClassCastException при попытке заполнить мой ArrayAdapter следующим ...

protected ArrayList<?> theList;
protected ArrayAdapter<Locale> aa = null;
...
protected void updateContents(ArrayList<?> list, int selectedItem) {
    theList = list;
    // Exception thrown on next line
    aa = new ArrayAdapter<Locale>(theContext, android.R.layout.simple_spinner_item,
        (Locale[]) theList.toArray());
    ...
*

} * 1013

Я передаю объект RegionList в updateContents () в качестве параметра list и RegionList extends ArrayList<Region> и Region extends Locale. Я также переопределил метод toString() в Region, чтобы вернуть действительную строку.

Что я здесь не вижу? Я не прав насчет того, как ArrayList<?>.toArray() работает?

1 Ответ

0 голосов
/ 29 декабря 2010

ОК, решено.

Мне нужно было использовать метод toArray (T [содержимого)) ArrayList следующим образом ...

Locale[] locArray = new Locale[theList.size()];
locArray = (Locale[]) theList.toArray(locArray);
aa = new ArrayAdapter<Locale>(theContext, android.R.layout.simple_spinner_item,
        locArray);
...