Android: как добавить метки перечисления в счетчик, а не в enum.values()?

Я пытаюсь составить список счетчиков, в котором мои пользователи могут выбирать языковые переводы на основе класса enum 'Language'.

Добавление «Language.values()» работает, но счетчик показывает «af», а не «AFRIKAANS». Я хочу, чтобы имя «AFRIKAANS» отображалось в счетчике, и onItemSelected я хочу получить значение «af».

Это возможно?

public enum Language {
       AUTO_DETECT(""),
       AFRIKAANS("af"),
       ALBANIAN("sq"),
       AMHARIC("am") ....and so no..

См. класс удержания перечисления здесь: http://code.google.com/p/google-api-translate-java/source/browse/trunk/src/com/google/api/translate/Language.java.

spinnerLanguage = (Spinner) findViewById(R.id.translate_spinner_language);
spinnerLanguage.setAdapter(new ArrayAdapter<Language>(this, android.R.layout.simple_spinner_item, Language.values()));
spinnerLanguage.setOnItemSelectedListener(new OnItemSelectedListener() {
    public void onItemSelected(AdapterView<?> parent, View v, int pos, long id) 
    {
       Log.i("language", parent.getItemAtPosition(pos).toString());
    }
    public void onNothingSelected(AdapterView<?> parent) 
    {
    }
});

person Voidcode    schedule 15.12.2011    source источник


Ответы (1)


Вместо переопределения toString() измените его на другую функцию:

public String shortCode() {
  return language;
}

Таким образом, toString() вернет AFRIKAANS для отображения Spinner, и вы можете вызвать shortCode() в onItemSelected(), чтобы получить af.

person chiuki    schedule 15.12.2011
comment
Круто, заработало :) Log.i( Language.fromString(parent.getItemAtPosition(pos).toString()).shortCode()); - person Voidcode; 16.12.2011