将charSequence元素转换为枚举元素

时间:2016-07-23 16:18:46

标签: java android enums charsequence

在AndroidStudio中,我创建了一个包含颜色的列表,可以使用AlertDialog.builder进行选择。 我将这些颜色存储在charSequence中,如CharSequence colors[] = new CharSequence[] {"Red1" , "Green1", "Blue1"}; 到现在为止还挺好。 现在我创建了一个类object1,其枚举Color定义为此

     public class Object1 {
          public enum Color {
            Red, Green, Blue
        }
          private Color selectedColor;
          public Object1 (Color color) {
          this.selectedColor = color;
          }
    }

我希望每当从AlertDialog中选择一种颜色时,将使用从AlertDialog中选择的颜色创建一个新的Object1实例。意思是我需要一种方法将charSequence转换为匹配的Color元素(枚举)并传递给objecgt1构造函数。我怎样才能做到这一点?我需要将"Green1"转换为Object1.Color.Green我不这样认为ValueOf方法会对此有所帮助,因为GreenGreen1是不同的字符串谢谢

3 个答案:

答案 0 :(得分:2)

您可以执行以下操作以从给定的String获取枚举对象。

public class Object1{

     public static enum Color {
        RED("Red1"), GREEN("Green1"), BLUE("Blue1");

        private String type;

        Color(String type) {
            this.type = type;
        }

        public String getType() {
            return type;
        }

        public static Color fromString(String text) {
            if (text != null) {
                for (Color color : Color.values()) {
                    if (text.equalsIgnoreCase(color.type)) {
                        return color;
                    }
                }
            }
            return null;
        }
    }
}

现在,如果你打电话

Object1.Color type = Object1.Color.fromString("Green1");

它将返回“绿色”类型的枚举。

感谢。

答案 1 :(得分:1)

您只需要将String值映射到枚举名称。这可以像下面这样简单地完成:

public static Color getColor(String name) {
    String mappedName = name.substring(0, name.length() - 1);
    return Color.valueOf(mappedName);
}

但这完全取决于你唯一的逻辑,所以只要尝试根据你的实际情况来映射它。

答案 2 :(得分:1)

您需要添加一些内容以将您的char序列转换为Colors。我建议使用静态地图:

  private static Map<CharSequence, Color> charsToColors;
  static
  {
    charsToColors = new HashMap<>();
    charsToColors.put("Red1", Color.Red);
    charsToColors.put("Green1", Color.Blue);
    charsToColors.put("Blue1", Color.Green);
  }

然后,当您需要CharSequence的颜色时,您可以这样:

charsToColors.get("Red1")

正如tynn所说,还有其他方法可以做到这一点,你只需选择最适合你用例的那个。