Android中的安全枚举自定义属性

时间:2013-09-26 11:21:26

标签: android android-custom-attributes

我认为这种情况很常见。我有一个Java枚举:

public enum Flavour { CHOCOLATE, STRAWBERRY }

我在attrs.xml中定义了一个自定义属性:

<attr name="flavour">
    <enum name="chocolate" value="0" />
    <enum name="strawberry" value="1" />
</attr>

但这感觉非常脆弱。它依赖于我正确地从属性手动映射到枚举。

如果有人在枚举Flavor的末尾添加“SARDINE”,那么它显然不会自动添加到属性定义中。这很公平。

但更糟糕的是,如果有人在枚举的中间添加“SARDINE”,它将破坏使用“草莓”的xml布局。

人们如何克服这一点?我考虑过使用字符串(并使用Flavour.valueOf()),但我希望有更清晰的解决方案。

1 个答案:

答案 0 :(得分:-3)

只要你保持Flavor枚举最新并与flavor属性同步,它应该没问题,但如果你真的不想担心订单,那么不要使用索引。而是按照你的考虑去使用Strings。

public enum Flavor {
  CHOCOLATE, STRAWBERRY

  public static Flavor get(String s) {
     s = s.toLowerCase();
     if(s.equals("chocolate")) {
       return CHOCOLATE;
     } else {
       return STRAWBERRY;
     }
  }
}