当前位置:   article > 正文

Android Library工程switch case中使用 R.id.x报错_r.id.是常量吗

r.id.是常量吗

一、问题描述

将普通Android工程转成Library工程后,编译报如下错误。

这里写图片描述

如图,switch语句的case中,不允许使用 R.id.xxx 。

当然,在创建好的Library工程中,switch语句的case中,使用 R.id.xxx 也是不允许的。

这是为什么呢?普通工程为啥可以呢?

二、原因分析

//Library工程的R文件
 public static int gift_pop_hide=0x7f04000f;
//普通工程的的R文件
public static final int abc_fade_in=0x7f040000;
  • 1
  • 2
  • 3
  • 4

对比普通工程和Library工程的R文件发现,Library工程的R文件常量缺少final。

由于Library工程的可以包含资源文件,编译会生成R文件,多个Library中可能出现id冲突的问题。为了解决这个问题谷歌将Library工程R文件才从静态常量变为非常量。

然而switch语句的case中 必须是常量,而此时的R.id.xxx为非常量,所以报错了。

三、解决办法

修改switch语句为if else语句。Android studio中提供快速切换方法。如下:

选中“switch”,ALt+Enter同时选中,弹出对话框,选择“Replace ‘switch’ with ‘if’”
这里写图片描述

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号