Android:如何在交换机中使用res / integers.xml值?

时间:2011-04-20 08:51:13

标签: java android resources

在我的应用程序中,我只需要一些名字很好的全局值。 首先,我所做的是将它们全部作为“公共静态最终”组件放入一个单独的类中。

然后我意识到我对全局字符串的处理(将它们放入res / strings.xml并通过getString(R.string.string_name)使用它们)也应该使用整数。

然而,我首先发现没有getInteger(R.integer.integer_name)这样的东西,但只有相当冗长的方式:

Resources r = getResources();
int integer = getInteger(R.integer.integer_name);

其次,当我尝试使用switch / case表达式中的值时,我只得到消息“case表达式必须是常量表达式”。

那么使用res / integers.xml有什么意义呢?我正要将我的整数重新放回一些无用的课程......

亲切的问候, 水母

2 个答案:

答案 0 :(得分:2)

对于switch / case表达式,我们在case语句中总是需要常量或枚举(< - ENUMS !!)。 switch参数允许使用变量,但case参数不得更改。

因此,如果您需要“存储”案例参数和类似名称,请删除integers.xml(不解决您的问题)以及static final public int - 实现{{1}而是建模你的全球价值。


等待一些细节提出枚举解决方案;)我们走了:

enum

public enum Value{ VALUE_ONE(300), VALUE_TWO(501), UNKNOWN(-1); private int value; private Value(int value) {this.value = value;} public int getValue() { return value; } public Value findValue(int value) { for (Value v:values()) { if (v.value == value) return v; } return Value.UNKNOWN; } 可用于获取数字值的枚举,如果我们查找未知数字,则findValue可以替代UNKNOWN。玩得开心:))

答案 1 :(得分:0)

实际做的是在strings.xml或其他自定义xml文件中创建一组值,并为它们提供描述性名称。这些值在编译时变为静态,每个xml值都是静态的,然后我可以通过它们的id来引用它们。

所以在xml中我做:

<string name="descriptive_name_that_is_easily_read_in_switch_case">
                     What I put here really doesn't matter</string>

然后在开关/案例中

switch(someValue){
    case R.id.descriptive_name_that_is_easily_read_in_switch_case:{
      <code>
    }
    break;
}

这样做的好处是我可以从代码中删除枚举/静态初始化,使其更具可读性,并且仍然可以在整个程序中重用这些值。

有时,您希望仅在某个类或方法中显示您的枚举/静态值。那么这不是你要做的。