| Android Library工程写代码需要注意switch ... case语句对资源id的引用,会引发编译错误:`case expressions must be constant expressions。` | |
| 通常android工程生成的资源R.java,资源id声明如下: | |
| public static final int main=0x7f030004; | |
| 而对于library工程,资源id声明如下: | |
| public static int main=0x7f030004; | |
| 缺少了final,因此使用 的switch ... case语句会编译失败。 | |
| ### 解决方法如下: | |
| 将switch ... case替换成if ... else语句。 | |
| #### for Eclipse | |
| Eclipse中,光标定位在switch上,按Ctrl + 1(Command + 1 for Mac osx),选择Convert 'switch' to 'if-else'. | |
| #### for Android studio | |
| 快捷键,Alt + Enter,选择 Replace 'switch' with 'if'. | |
| 如转换前代码: | |
| ~~~.java | |
| @Override | |
| public void onClick(View v) { | |
| switch (v.getId()) { | |
| case .btn_left: | |
| hideSoftKeyboard(); | |
| finish(); | |
| break; | |
| default: | |
| break; | |
| } | |
| } | |
| ~~~ | |
| 转换后代码: | |
| ~~~.java | |
| @Override | |
| public void onClick(View v) { | |
| int id = v.getId(); | |
| if (id == .btn_left) { | |
| hideSoftKeyboard(); | |
| finish(); | |
| } else { | |
| } | |
| } | |
| ~~~ |
转自:http://www.yinqisen.cn/blog-468.html
















