2016-07-23 13 views
0

AndroidStudioでは、AlertDialog.builderから選択する色を含むリストを作成しました。 これまでのところ、CharSequence colors[] = new CharSequence[] {"Red1" , "Green1", "Blue1"}; のようにcharSequenceで色を保存しました。 は今、私は色がAlertDialogから選択されるたびにオブジェクト1の新しいインスタンスがAlertDialogから選択した色を使用して作成されることを望むこのcharSequence要素をenum要素に変換する

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

のように定義された列挙型Colorを持つクラスobject1を作りました。つまり、charSequenceを一致するColor要素(enum)に変換し、objecgt1コンストラクタに渡す方法が必要です。これどうやってするの?私はGreenGreen1が異なる文字列であるため、ValueOf方法がここに役立つことをこれをしませんObject1.Color.Greenに例えば"Green1"を変換する必要がありますが、唯一の列挙名に文字列値をマッピングする必要が

答えて

1

ありがとうございます。これは、次のように簡単に行うことができます。

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

しかし、それは完全にそうちょうどあなたの実際の実装に応じて、それをマップしようと、あなただけのロジックに依存します。

2

指定したStringからenumオブジェクトを取得するには、次の操作を行います。あなたは

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

を呼び出す場合

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

今、それはあなたの 'グリーン' 型の列挙を返します。

ありがとうございました。

1

色のシーケンスを色に変換するために何かを追加する必要があります。あなたがたCharSequenceの色を必要とするとき、あなたがそうのようにそれを得ることができその後

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

:私は、静的なマップを使用することをお勧めします

charsToColors.get("Red1") 

tynnがあまりにもこれを行うには、他の方法がある言ったように、ユースケースに最も適したものを選ぶだけです。

+0

ありがとう、これは私が選んだものです – Noam

+0

助けてくれてうれしいです:D –

関連する問題