解决方案
今天在Adt-Eclipse-bundles导入一个之前写的Android项目时出现错误,具体提示是:“case expressions must be constant expressions”,所有错误都指向包含R.id的地方,形如:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
出现这种错误的原因是本工程被指定为Android library project,右键工程选择属性,出现如下图片。
如图中红色所示,取消勾选”Is Library”即可编译通过。
不过话说回来,为啥Android Library工程会出现这种错误,要是项目本来就要指定为”Is Library”该如何处理。
原因是对于普通的Android工程,生成的R文件的类声明如下所示:
- 1
但是对于library工程,其声明会是:
- 1
由于缺少了final,不被认为是常量,从而导致switch…case编译出错。
解决方案是将switch语句转化为if-else语句
- 对于eclipse环境,光标定位在switch语句上,按ctrl+1键然后选择“Convert ‘switch’ to ‘if-else’”。
- 对于Android Studio环境,光标定位在switch语句上,按Alt+Enter键然后选择“Replace ‘switch’ with ‘if’”。
其实这篇文章更像是翻译,Stack Overflow上有完整的说明。