我无法理解以下内容:在我的本地化应用程序中,我在一个活动中有Enum
,它存储了一些本地化字符串(R.string.aString
),这些字符串与另一个本地化字符串进行比较。
如果在应用程序中我更改了语言环境并且我回来并启动包含Enum的Activity,我发现它的成员与本地化更改之前的相同。
这是什么原因?
编辑:
class Settings extends Activity
{
public enum SettingPreferenceScreen
{
Connection (R.string.Connection , xml_resource_1)
Legend (R,string.Legend ,xml_resource_2)
.......
String key;
int res;
SettingPreferenceScreen(String key, int res)
{....}
public int getResource (String key)
{
for(SettingPreferenceScreen p : SettingPreferenceScreen.values())
if(key.equals(p.key))
return p.res;
return -1;
}
}
}
答案 0 :(得分:2)
首先,在为Android开发时尝试avoiding Enums。
其次,我的猜测是在onCreate()
方法上创建了枚举
您的Activity
以及第二次打开该应用程序时未调用该方法。查看Activity's lifecycle。
答案 1 :(得分:2)
R.string
不包含字符串,它包含资源ID常量。 (自动生成的int
值。)无论配置如何,这些ID都是相同的。 ID常量用于从Resources
对象(或从Context
获取应用程序资源,该Resources
会调用getString
。当您致电{{1}}或类似时,系统将在适用时返回本地化资源。
您似乎正在尝试重新实现Android已为您提供的功能。如果不是这样的话,你能给我们一些更多细节吗?
答案 2 :(得分:1)
更新:
没有必要再回避Android中的枚举...我不知道它何时出现但是android sdk现在包含proguard,它在构建时优化代码并用int常量替换枚举(参见proguard.cfg
)。
此外,删除了开发指南中不使用枚举的段落(http://developer.android.com/guide/practices/design/performance.html)