在Switch中使用来自资源XML的字符串?

时间:2015-04-09 14:53:31

标签: java android switch-statement android-resources

这里是Android的新手,所以如果这是一个简单的问题我会道歉。

我正在尝试在XML中使用基于字符串资源的开关。它看起来像这样:

switch (myStringVariable) {
    case getResources().getString(R.string.first_string):
         break;
    case getResources().getString(R.string.second_string):
         break;
    case getResources().getString(R.string.third_string):
         break;
    default:
         break;
}

不幸的是,这不会奏效。我得到的错误是"需要常量表达式"。

是否有一种半优雅的方式来解决这个问题,而不必像创建3个String对象那样做并为每个对象分配字符串资源?我觉得我错过了一些明显的东西,所以任何帮助都会很棒!

谢谢:)

3 个答案:

答案 0 :(得分:5)

首先,Android所基于的Java版本不支持String switch语句,因此通常需要使用if/else块。

编辑:如果您使用JDK 1.7及更高版本,则支持字符串开关语句

我不确定您的用例是什么,但如果您的资源ID为myStringVariable,这是int,您可以切换它:

switch (myStringResId) {
case R.string.first_string:
     break;
case R.string.second_string:
     break;
case R.string.third_string:
     break;
default:
     break;
}

答案 1 :(得分:4)

嗯,这不是最优雅的方式,但你可以使用if - else if语句而不是switch - case:

if (myStringVariable.eqals(getString(R.string.first_string))) {
    // do something
} else if (myStringVariable.eqals(getString(R.string.second_string))) {
    // do something
} else if (myStringVariable.eqals(getString(R.string.third_string))) {
    // do something
}

答案 2 :(得分:3)

你不会遗漏与Android相关但与Java相关的东西。

查看关于Java如何管理Switch语句的答案:

https://stackoverflow.com/a/3827424/2823516

您必须使用您提到的非优雅解决方案。但谁说不优雅?是你应该做的,这使它变得优雅。