Добавление перечислений в массив адаптер для Spinner в Android - PullRequest
14 голосов
/ 25 августа 2011

Я хочу использовать перечисления для списка внутри виджета счетчика на 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()));

Это почти работает, но в моем списке счетчиков я получаю аббревиатуры, а не названия состояний (для этого я и собираюсь). Есть ли обходной путь для правильной настройки?

Ответы [ 3 ]

35 голосов
/ 19 октября 2011

Надеюсь, это кому-нибудь поможет. Мне понадобилось время, чтобы понять это для себя. Хитрость заключается в том, чтобы переопределить 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();
0 голосов
/ 12 сентября 2011

возможно, вы можете попробовать переопределить функцию toString (), как показано здесь здесь . Я еще не пробовал, но уже собирался.

0 голосов
/ 25 августа 2011

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