R.java的不能识别控件的问题

  今天在调试一个网上的小例子的时候,遇到的一个问题:发现自己以前调用R.java文件的R.id.btn...获取到的组件突然都不能用了,下面显示的都是红色的错误标志,很奇怪。如下:

 

因为这些组件也是当时调用R.java.可以生成的,为什么现在不能用了,发现项目中gen目录下那些自动生成的文件R.java等不见了,文件夹也为空,于是通过重新清理项目,重新构建等也没能让它产生。最终还是通过下面的办法解决的,如图:

然而这只是解决了没有R.java之类的自动生成的文件的问题,却没有解决生成的那些错误。于是突然冒出来一个想法:会不会是与R有关的包没有导入进去或者导入错误。查看上面导入的包发现,有个与R有关包:import android.R;第一反应就是那应该能用啊,有包啊。试着删除下看看会报出来什么错误,结果就是令我惊呆了。。。。。竟然错误全部消失了!!!对,是全部!!!错误,消失了???!!!重新添上,仔细看下发现上面有个警告:

仔细看上面的解释可以看到,它要我们:不要在此处包含android.R文件;每次使用时用完全限定名代替。

android.R 是Android的资源文件索引,它中间很多是系统自定义的一些默认的东西。我试着去导入android.R.id内部类:

import android.R.id;直接调用id里的静态变量,在输入“id.”后的提示结果如下:

可见这些是系统的一些默认的常量。而不是我们自己定义的常量(我们在xml布局文件中 通过@+id/...这种方式添加的)。其实我们自己定义的这些常量存在的位置就是Android为我们自动生成的那些文件中,此处为:R.java。

然后我特意去看看以前建的项目,发现里面根本就没有import android.R这句。那时候也确实没有遇到这种错误。这就证明了我们导入android.R包之后,通过R.id调用的不再是我们自己添加的控件的id常量,而是添加的系统自定义的那些常量(这也是为什么当我们没有给拖拽进去的控件定义id属性时系统能自动为我们添加上类似 android:id="@+id/button1的原因,而且其会地洞增长,如:button2,button3 ,......)而显然此时我们调用我们自己的控件的时候不会再给我们自动提示,而我们强制手动输入上之后就会报错,因为R静态类以及其下面的id静态类与我们自己定义的重名了,无法识别,造成我们无法访问自己的控件。

因此解决方法就是去掉那句有时候系统为我们自动导入的android.R 包:import android.R;

转载于:https://www.cnblogs.com/myorange/p/5394985.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值