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

问题描述 投票:10回答:3

这里是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对象并将字符串资源分配给每个对象的操作?我觉得我似乎缺少一些明显的东西,因此,任何帮助都会很棒!

谢谢:)

java android switch-statement android-resources
3个回答
5
投票

首先,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;
}

4
投票

嗯,这不是最优雅的方法,但是您可以使用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
}

3
投票

您不会缺少与Android相关的东西,而是与Java相关的东西。

检查有关Java如何管理Switch语句的答案:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.