| 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,因此使用R.id 的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 R.id.btn_left: |
| hideSoftKeyboard(); |
| finish(); |
| break; |
|
|
| default: |
| break; |
| } |
| } |
| ~~~ |
|
|
| 转换后代码: |
|
|
| ~~~.java |
| @Override |
| public void onClick(View v) { |
| int id = v.getId(); |
| if (id == R.id.btn_left) { |
| hideSoftKeyboard(); |
| finish(); |
| } else { |
| } |
| } |
| ~~~ |