这里是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对象并将字符串资源分配给每个对象的操作?我觉得我似乎缺少一些明显的东西,因此,任何帮助都会很棒!
谢谢:)
首先,Android所基于的Java版本不支持String开关语句,因此通常必须改为使用if/else
块。
EDIT:如果使用JDK 1.7和更高版本,则支持字符串切换语句
我不确定您的用例是什么,但是如果您具有myStringVariable
的资源ID,即int
,则可以对此进行切换:
switch (myStringResId) {
case R.string.first_string:
break;
case R.string.second_string:
break;
case R.string.third_string:
break;
default:
break;
}
嗯,这不是最优雅的方法,但是您可以使用if-else if语句而不是switch-case:
if (myStringVariable.equals(getString(R.string.first_string))) {
// do something
} else if (myStringVariable.equals(getString(R.string.second_string))) {
// do something
} else if (myStringVariable.equals(getString(R.string.third_string))) {
// do something
}
您不会缺少与Android相关的东西,而是与Java相关的东西。
检查有关Java如何管理Switch语句的答案:
https://stackoverflow.com/a/3827424/2823516
您必须使用您提到的非优雅的解决方案。但是谁说不优雅?这是您应该做的,这使它优雅。