【问题标题】:Put ENUM values to android spinner?将 ENUM 值放入 android spinner?
【发布时间】:2011-07-25 02:05:16
【问题描述】:

例如:我有一个包含天数的枚举。

如何将其值放入 spinner 中?

【问题讨论】:

  • 请记住,在 Android 环境中使用枚举的效率较低。如果你想让你的代码考虑到性能,你应该根据 Android 的性能指令避免使用枚举。
  • @Luis Miguel Serrano,从 android 2.2 开始并不是真的。
  • 有些事情我发现没有枚举很难实现。
  • @Vladimir,谢谢提及。
  • 如果您对数组有不同的显示和值,请查看此答案:stackoverflow.com/a/37266810/293280

标签: android enums spinner


【解决方案1】:

与另一个答案类似,但您可以使用 ArrayAdapter 基于 Enum 类进行填充。我建议在 Enum 类中覆盖 toString 以使微调器中填充的值对用户更友好。 在活动中:

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;
    }
}

【讨论】:

  • 虽然我更喜欢其他答案,但很高兴知道这样的事情是可能的。 +1
  • 如果我想更改系统语言,我应该怎么做?我不能像 ENUM1("Enum 1"); 那样初始化;
  • @Urchin 您可以给它一个 stringResId 然后...但是您必须构建自己的适配器才能从 resId 而不是 toString 获取字符串。
  • 如果这个枚举是在库模块中定义的呢?在没有上下文的情况下如何访问字符串资源? )-:
【解决方案2】:

某种演练正在使用:

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

【讨论】:

    【解决方案3】:

    您可以像其他类一样覆盖枚举类中的 toString 函数,并且微调器将读取 toString 值。

    例如

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

    【讨论】:

      猜你喜欢
      • 2018-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      相关资源
      最近更新 更多