Добавление Enums в Array Adapter для Spinner в Android
Я хочу использовать перечисления для списка внутри виджета spinner на android. У меня есть настройки перечислений следующим образом:
public enum States{
AL("Alabama"),
AK("Alaska"),
AR("Arkansas"),
AZ("Arizona"),
CA("California"),
CO("Colorado"),
... (etc.)
}
Мой текущий адаптер массива настроен следующим образом:
mAddressState.setAdapter(new ArrayAdapter<States>(this, android.R.layout.simple_list_item_1, States.values()));
Это почти работает, но в моем списке spinner я получаю сокращения, а не имена состояний (для чего я и собираюсь). Есть ли способ обхода этой настройки правильно?
Ответы
Ответ 1
Я надеюсь, что это поможет кому-то. Мне потребовалось некоторое время, чтобы понять это для себя. Трюк состоит в том, чтобы переопределить toString в вашем перечислении. Код для перечисления состояний будет следующим:
public enum States{
AL("Alabama"),
AK("Alaska"),
AR("Arkansas"),
AZ("Arizona"),
CA("California"),
CO("Colorado"),
... (etc.);
private String theState;
States(String aState) {
theState = aState;
}
@Override public String toString() {
return theState;
}
}
Затем создайте адаптер так же, как и вы:
mAddressState.setAdapter(new ArrayAdapter<States>(this,
android.R.layout.simple_list_item_1, States.values()));
а длинные имена появятся в счетчике. Чтобы получить сокращенное имя от адаптера, чтобы сохранить выбранный экземпляр, используйте функцию enum.name(). Например:
Spinner spinner = (Spinner) myView.findViewById(R.id.theState);
String selected = ((States)spinner.getSelectedItem()).name();
Ответ 2
Добавьте конструктор enum, подобный этому... затем замените States.values () на States.fullName()
public enum States{
AL("Alabama"),
AK("Alaska"),
... (etc.)
private String fullName;
States(String fullName) {
this.fullName = fullName;
}
public String fullName() { return fullName; }
}
Ответ 3
возможно, вы можете попробовать переопределить функцию toString(), как показано здесь здесь. Я еще не пробовал, но я просто собирался.