活动中的枚举

时间:2010-07-12 17:32:45

标签: android

我无法理解以下内容:在我的本地化应用程序中,我在一个活动中有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;
    }

    }

}

3 个答案:

答案 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