Android 如果用户更改设备语言,枚举静态映射将无法用于本地化
根据我的要求,应用程序必须根据设备上的区域设置更改反映字符串更改。但这里主要使用静态映射来保存枚举,这些枚举将在区域设置更改后重新初始化 下面是示例代码:Android 如果用户更改设备语言,枚举静态映射将无法用于本地化,android,enums,static,Android,Enums,Static,根据我的要求,应用程序必须根据设备上的区域设置更改反映字符串更改。但这里主要使用静态映射来保存枚举,这些枚举将在区域设置更改后重新初始化 下面是示例代码: public enum Color{ Green(R.string.green), Warning(R.string.red), ENSLow(R.string.blue), Zero(R.string.orange), private static Map<String, Color> co
public enum Color{
Green(R.string.green),
Warning(R.string.red),
ENSLow(R.string.blue),
Zero(R.string.orange),
private static Map<String, Color> colorMap = new HashMap<String, Color>();
private final int mResId;
}
static {
for Color color : values()) {
colorMap .put(appContext.getResources().getString(state.mResId), color);
}
}
Color(int resId) {
mResId = resId;
}
公共枚举颜色{
绿色(右弦绿色),
警告(右字符串红色),
恩斯洛(右弦蓝色),
零(右弦橙色),
私有静态映射colorMap=newhashmap();
私人终审法院;
}
静止的{
对于颜色:值()){
colorMap.put(appContext.getResources().getString(state.mResId),color);
}
}
颜色(整数剩余){
mResId=剩余;
}
请建议我如何避免对颜色使用静态贴图?不要以这种方式创建自己的常量。Android已经为你做了 只需始终使用appContext.getResources().getString(R.string.green) 发件人: 在运行时,Android系统根据当前为用户设备设置的语言环境使用适当的字符串资源集 所以你的字符串已经被缓存了
选中此项:使用资源id:`map`而不是解析的
字符串创建映射,并在需要时向枚举添加一个方法以获取它。为什么需要此项?应用程序的当前活动将在区域设置更改时重建,因此字符串将重新初始化。