这里是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对象那样做并为每个对象分配字符串资源?我觉得我错过了一些明显的东西,所以任何帮助都会很棒!
谢谢:)
答案 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
您必须使用您提到的非优雅解决方案。但谁说不优雅?是你应该做的,这使它变得优雅。