0

在 AndroidStudio 中,我制作了一个列表,其中包含可供选择的颜色AlertDialog.builderCharSequence colors[] = new CharSequence[] {"Red1" , "Green1", "Blue1"}; 到目前为止,我像这样将颜色存储在 charSequence 中。现在我已经创建了一个具有这样定义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方法在这里会有所帮助,因为Green它们Green1是不同的字符串谢谢

4

3 回答 3

2

您可以执行以下操作以从给定的字符串中获取枚举对象。

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");

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

谢谢。

于 2016-07-23T16:50:33.707 回答
1

您需要添加一些东西来将您的字符序列转换为颜色。我建议使用静态地图:

  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 所说,还有其他方法可以做到这一点,您只需要选择最适合您的用例的方法。

于 2016-07-23T16:52:41.917 回答
1

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

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

但这完全取决于您唯一的逻辑,因此请尝试根据您的实际实现对其进行映射。

于 2016-07-23T16:43:13.587 回答