Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果用户更改设备语言,枚举静态映射将无法用于本地化_Android_Enums_Static - Fatal编程技术网

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`而不是解析的
字符串创建映射,并在需要时向枚举添加一个方法以获取它。为什么需要此项?应用程序的当前活动将在区域设置更改时重建,因此字符串将重新初始化。