0

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 要素 (enum) に変換し、objecgt1 コンストラクターに渡す方法が必要です。これどうやってするの?"Green1"たとえば、に変換する必要がありますObject1.Color.GreenI don't thisValueOfメソッドはここで役立ちますGreenGreen1は異なる文字列です

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

「GREEN」タイプの列挙型を返します。

ありがとう。

于 2016-07-23T16:50:33.707 に答える
1

String 値を enum 名にマップするだけで済みます。これは、次のように簡単に実行できます。

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

しかし、それはあなたの唯一のロジックに完全に依存しているので、実際の実装に応じてマッピングしてみてください.

于 2016-07-23T16:43:13.587 に答える
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 の Color が必要な場合は、次のように取得できます。

charsToColors.get("Red1")

tynn が言ったように、これを行うには他にも方法があるため、ユース ケースに最も適した方法を選択する必要があります。

于 2016-07-23T16:52:41.917 に答える