我正在使用这个枚举:public enum FruitType{ APPLE("1", "Apple"), ORANGE("2", "Orange"), BANANA("3", "Banana"), UNKNOWN("0", "UNKNOWN"); private static final Map<String, FruitType> lookup = new HashMap<String, FruitType>(); static { for ( FruitType s : EnumSet.allOf(FruitType.class) ) lookup.put(s.getCode(), s); } public static FruitType getById(String id) { for(FruitType e : values()) { if(e.Code.equals(id)) return e; } return UNKNOWN; } private String Code; private String Text; FruitType( String Code, String Text ) { this.Code = Code; this.Text = Text; } public final String getCode() { return Code; } public final String getText() { return Text; }}我从服务器获取一个数字 (0-3),并且我想使用本地化字符串来使用枚举的 getText() 方法。textView.setText(FruitType.getById(data.getFruitType()).getText())如何在枚举的“文本”中使用字符串资源而不是静态文本?
1 回答
12345678_0001
TA贡献1802条经验 获得超5个赞
Android 已经为您提供了一个非常可靠的方法来通过其资源目录结构来解决 i18n 问题。
在您的情况下,最好不要FruitType直接与字符串相关,而是与 res ID 相关:
public enum FruitType {
APPLE("1", R.string.apple),
ORANGE("2", R.string.orange),
BANANA("3", R.string.banana),
UNKNOWN("0", R.string.unknown_fruit);
...
}
然后,您可以定义一个便捷方法来获取这些枚举的实际字符串值,如下所示:
public enum FruitType {
...
public final String getText(Context context) {
return context.getString(this.Text)
}
...
}
strings.xml现在我们有了这个设置,只需继续根据您的目标区域设置声明多个的常规练习:
../src/main/res
├── values
│ └── strings.xml
├── values-in
│ └── strings.xml
├── values-th
│ └── strings.xml
└── values-vi
└── strings.xml
添加回答
举报
0/150
提交
取消