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

我有一个我认为相当普遍的情况。 我有一个Java枚举:

public enum Flavour { CHOCOLATE, STRAWBERRY } 

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

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

但这感觉真的很脆弱。 它依靠我手动从属性映射到枚举正确。

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

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

人们如何克服这一点? 我已经考虑使用string(并使用Flavour.valueOf() ),但我希望有可能有一个更清洁的解决scheme。

Solutions Collecting From Web of "Android中的安全枚举自定义属性"

只要保持Flavor枚举与flavor属性保持一致,应该没问题,但是如果你真的不想担心顺序,那就不要使用indices。 按照你的想法去用string。

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