可以在switch语句中使用Android Integer资源吗?

时间:2011-05-17 15:37:58

标签: java android eclipse

我项目的“values”目录中有一个“numeric.xml”文件,它保存了项目的大部分整数常量。我想在switch语句中使用其中的一些常量,但Eclipse / Java不喜欢这样,因为它不认为“resources.getInteger(R.integer.INTEGER_NAME)”是常量。有没有办法让编译器和/或Eclipse看到它是一个常量,或者我只需要使用if / else链?

编辑:我尝试执行“final int INTEGER_NAME = resources.getInteger(R.integer.INTEGER_NAME)”并在案例陈述中使用INTEGER_NAME,但这也不起作用。

3 个答案:

答案 0 :(得分:3)

从技术上讲,您的整数资源值不是常量。编译器应该如何知道每种情况的值?总是有可能为不同的配置检索不同的值。 (例如,您可以使用values-land资源文件夹,其中包含不同的横向值。)或者您可以只更改xml文件中的值。

如果它们是真正的常量,请在代码中定义它们。我能看到的唯一另一种选择是创建一个Runnable(或Callable)对象的调度表,一个用于交换机的每个分支,并根据从资源中检索的值检索适当的一个。

答案 1 :(得分:2)

嗯,resources.getInteger(R.integer.INTEGER_NAME)不再是resources.getString(R.string.STRING_NAME)的常量:它是一个查找,所以你真的不能在case语句中使用它们。你必须使用if / else链。

答案 2 :(得分:0)

我试过这些并且有效

Resources r = getResources(); 
int i = r.getInteger(R.integer.lol); 
switch (i) { 
    case 1: 
        Log.d("lol", "hehehe0"); 
        break; 
    default: 
        break; 
}