在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
方法会对此有所帮助,因为Green
和Green1
是不同的字符串谢谢
答案 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所说,还有其他方法可以做到这一点,你只需选择最适合你用例的那个。