将ENUM值放入Android Spinner?

38
例如:我有一个包含星期几的枚举。
我该如何将其值放入下拉框中?

1
请注意,在Android环境中使用枚举的效率较低。如果您想要编写性能良好的代码,应遵循Android的性能指令,避免使用枚举。 - Luis Miguel Serrano
3
@Luis Miguel Serrano,不是真正的Android 2.2版本。 - Vladimir Ivanov
有一些事情我发现如果没有枚举很难实现。 - saikek
如果您对数组的显示和值有不同的要求,请参考以下答案:https://dev59.com/-mgu5IYBdhLWcg3wZmW8#37266810 - Joshua Pinter
3个回答

72

类似于另一个答案,但是您可以使用ArrayAdapter根据枚举类进行填充。我建议在枚举类中覆盖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 - Antiohia
如果我想更改系统语言,我该怎么做?我无法像ENUM1(“枚举1”)那样初始化。 - Urchin
2
@Urchin 你可以给它一个 stringResId,然后...但是你必须构建自己的适配器来从 resId 中获取字符串,而不是使用 toString。 - SjoerdvGestel
如果这个枚举是在库模块中定义的呢?没有上下文,怎么访问字符串资源呢?)-: - Wooff

44

有某种类型的教程正在使用:

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

0

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

例如:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接