Поместить значения ENUM в счетчик Android?

Например: у меня есть перечисление с днями.

Как мне поместить его значения в счетчик?


person saikek    schedule 29.03.2011    source источник
comment
Имейте в виду, что использование перечислений в среде Android менее эффективно. Если вы хотите сделать свой код с учетом производительности, вам следует избегать перечислений в соответствии с директивами производительности Android.   -  person Luis Miguel Serrano    schedule 29.03.2011
comment
@Luis Miguel Serrano, не совсем актуально для Android 2.2.   -  person Vladimir Ivanov    schedule 29.03.2011
comment
Были некоторые вещи, которые мне было трудно реализовать без перечислений.   -  person saikek    schedule 29.03.2011
comment
@Владимир, спасибо за упоминание.   -  person Luis Miguel Serrano    schedule 30.03.2011
comment
Взгляните на этот ответ, если у вас другое отображение и значение для массива: stackoverflow.com/a/37266810/293280   -  person Joshua Pinter    schedule 17.05.2016


Ответы (3)


Аналогично другому ответу, но вы можете использовать ArrayAdapter для заполнения на основе класса Enum. Я бы рекомендовал переопределить toString в классе Enum, чтобы сделать значения, заполняемые счетчиком, более удобными для пользователя. В деятельности:

Spinner mySpinner = (Spinner) findViewById(R.id.mySpinnerId);

mySpinner.setAdapter(new ArrayAdapter<MyEnum>(this, android.R.layout.simple_spinner_item, MyEnum.values()));

Ваш класс перечисления:

public enum MyEnum{
    ENUM1("Enum 1"),
    ENUM2("Enum 2");

    private String friendlyName;

    private MyEnum(String friendlyName){
        this.friendlyName = friendlyName;
    }

    @Override public String toString(){
        return friendlyName;
    }
}
person Adam    schedule 23.12.2011
comment
Хотя я предпочитаю другой ответ, приятно узнать, что что-то подобное возможно. +1 - person Antiohia; 30.06.2014
comment
Если я хочу изменить язык системы, что мне делать? Я не могу инициализировать как ENUM1 (Enum 1); - person Urchin; 29.10.2014
comment
@Urchin, тогда вы могли бы присвоить ему stringResId ... но вам нужно создать свой собственный адаптер, чтобы получить строку из resId вместо toString. - person SjoerdvGestel; 29.04.2015
comment
а что, если это перечисление определено в библиотечном модуле? где нет способа получить доступ к строковому ресурсу без контекста? )-: - person Wooff; 10.07.2015

Какое-то пошаговое руководство использует:

Spinner mySpinner = (Spinner) findViewById(R.id.cmbClothType);
mySpinner.setAdapter(new ArrayAdapter<MyType>(this, android.R.layout.simple_list_item, MyType.values()));
person saikek    schedule 29.03.2011

Вы можете переопределить функцию toString в классе перечисления, как и в других классах, и счетчик будет считывать значение toString.

Для экс.

enum class Duration(val value : String) {
  DURATION_HINT("Duration Unit"),
  DAY("Day"),
  WEEK("Week"),
  MONTH("Month");

  override fun toString() : String {
    return value
  }
}

person Muhammad Helmi    schedule 13.12.2020