Android 微调器选择的字符串取决于开关案例中使用的语言

Android 微调器选择的字符串取决于开关案例中使用的语言,android,localization,switch-statement,Android,Localization,Switch Statement,我的活动中有一个微调器,上面有“hello”和“再见”两个项目供用户选择。当设备使用西班牙语时,这些项目将是“hola”和“adios”,因为字符串是从string es/中选择的,而不是从string中选择的 问题是我的代码中有很多这样的切换情况: switch(spinnerSelectedItem){ case "hello": case "hola": //do something break; case "goodb

我的
活动中有一个
微调器
,上面有“hello”和“再见”两个项目供用户选择。当设备使用西班牙语时,这些项目将是“hola”和“adios”,因为字符串是从
string es/
中选择的,而不是从
string
中选择的

问题是我的代码中有很多这样的切换情况:

switch(spinnerSelectedItem){
     case "hello":
     case "hola":
          //do something
          break;
     case "goodbye":
     case "adios":
          //do something else
          break;

}
我试图创建最后一个用字符串资源初始化的字符串,但它抱怨说“需要常量表达式”

这是一个简化版本,我有更多的项目和两种以上的语言

一种解决方案是使用strings id而不是value,或者使用if子句而不是switch,但是我想找到一种“智能”或“干净”的方法来实现这一点,您有什么想法吗?

您可以使用Resources方法来获取字符串的id。如:
getResources().getIdentifier(resValue,“string”,getPackageName())

这将返回您可以在switch语句中使用并比较的id

使用id会更好,因为您可以在切换情况下使用它们,并且它们会根据语言自动指向正确的资源。那么我应该编写一个从选定字符串转换为id的方法,对吗?例如:
public int-idFromStringResourceValue(String-resValue){if(resValue.equals)(getResources().getString(R.String.helloText)){return R.String.helloText;}if(resValue.equals)(getResources().getString(R.String.goodbyeText)){return R.String.goodbyeText;}
或者有更好的方法吗?字符串对象上的Switch语句是Java 1.7中引入的一项新功能是的,我可以将Switch与字符串一起使用,但只有在Switch case中对字符串进行硬编码时它才起作用,如果没有硬编码,它会给出“需要常量表达式”当使用资源字符串值作为最终字符串时,如原始问题中的第二个代码。我是否做错了什么?好的,谢谢!我想我将编写自己的方法,仅在与微调器相关的有限字符串范围内查找匹配项,可能比使用此方法查找所有字符串要快资源。这取决于您拥有的字符串资源的数量。但我认为,随着您不断以多种语言添加字符串资源,这种方法在未来将更具可扩展性。非常感谢!
final String resHello = getResources().getString(R.string.helloText);
final String resGoodbye = getResources().getString(R.string.goodbyeText);

switch(spinnerSelectedItem){
     case resHello :    
          //do something
          break;
     case resGoodbye :
          //do something else
          break;
}