在Android library中不能使用switch-case语句访问资源ID

来源:互联网 发布:阿里云市场 编辑:程序博客网 时间:2024/04/30 16:31

问题:

android library资源索引报错

报错提示:

Resource IDs cannot be used in a switch statement in Android library modules

翻译如下:

在Android library中不能使用switch-case语句访问资源ID

原因分析

  当我们在Android依赖库中使用switch-case语句访问资源ID时会报如下图所示的错误,报的错误是case分支后面跟的参数必须是常数,换句话说出现这个问题的原因是Android library中生成的R.java中的资源ID不是常数:

library errorlibrary error
  打开library中的R.java,发现确实如此,每一个资源ID都没有被声明为final:

library R.javalibrary R.java
  但是当你打开你的主工程,在onClick、onItemClick等各种回调方法中是可以通过switch-case语句来访问资源ID的,因为在主工程的R.java中资源ID都被声明为了final常量。project中才能够通过switch-case语句正常引用资源ID。

解决方案

  既然是由于library的R.java中的资源ID不是常量引起的,我们可以在library中通过if-else-if条件语句来引用资源ID,这样就避免了这个错误。

public void onClick(View src){    int id = src.getId();    if (id == R.id.playbtn){        // ...    } else if (id == R.id.stopbtn){        // ...    } else if (id == R.id.btnmenu){        openOptionsMenu();    }}
阅读全文
0 0
原创粉丝点击