2016-07-23 10 views
0

In AndroidStudio habe ich eine Liste mit Farben erstellt, die mit AlertDialog.builder ausgewählt werden können. Ich speicherte die Farben in charSequence wie diese CharSequence colors[] = new CharSequence[] {"Red1" , "Green1", "Blue1"}; so weit so gut. Jetzt habe ich eine Klasse object1 gemacht, die Color wie dieseKonvertieren von charSequence-Elementen in enum-Elemente

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

Ich möchte definierte eine ENUM hat, dass, wenn eine Farbe aus dem Alertdialog eine neue Instanz von Object1 ausgewählt wird, wird mit Farbe aus dem Alertdialog ausgewählt erstellt werden. Das bedeutet, ich brauche eine Möglichkeit, charSequence in ein passendes Color-Element (enum) zu konvertieren und an objecgt1-Konstruktor zu übergeben. Wie kann ich das machen? Ich brauche "Green1" zum Beispiel die Umwandlung in Object1.Color.Green ich dies nicht, dass die ValueOf Methode hier helfen, da Green und Green1 sind verschiedene Strings Danke

Antwort

1

Sie brauchen nur die String-Werte zu dem Enum-Namen zuordnen. Dies kann so einfach wie die folgenden getan werden:

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

Aber es hängt ganz von Ihrer nur Logik, also nur versuchen, es zu kartieren je nach realer Umsetzung.

2

Sie können Folgendes tun, um enum-Objekt von einem gegebenen String zu erhalten.

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

Nun, wenn Sie rufen

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

Es kehren Sie eine ENUM von 'GREEN' Typ.

Danke.

1

Sie müssen etwas hinzufügen, um Ihre Zeichenfolgen in Farben zu übersetzen. Ich würde empfehlen, eine statische Karte mit:

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

Dann, wenn Sie die Farbe für die CharSequence müssen Sie es wie so bekommen konnte:

charsToColors.get("Red1") 

Wie Tynn sagte, gibt es andere Möglichkeiten, dies zu tun, Sie müssen nur diejenige auswählen, die am besten zu Ihrem Anwendungsfall passt.

+0

Danke, das ist, was ich wählte – Noam

+0

Froh zu hören, es half: D –