同一个project下多个包,其中一个包出现R cannot be resolved to a variable

来源:互联网 发布:php判断是否微信打开 编辑:程序博客网 时间:2024/06/05 17:53
现象:
在同一个project下编写了2个包,其中一个R.layout可以正常调用,但另一个包中调用R文件会出现R cannot be resolved to a variable报错。


验证过程:
从网上搜索此问题解决方案,发现比较杂乱,但大体上都是推荐使用如下流程验证:
1. 检查Android 的SDK是否丢失需要重新下载,检查build path
2.确保class没有import Android.R;
3,错误class引用的layout的xml文件没有错误
4.检查AndroidManifest.xml文件,里边的package,layout配置文件,strings.xml等的字符串全部书写正确
5.layout的xml文件中引用的strings.xml中的字符串拼写完全正确
6.在layout 的xml文件手写添加一个控件,看id能否在R.java中自动生成,如果不能,那很大可能就是这个layout 的xml文件有问题,查看格式是否使用正确,或者包含什么非法字符串,或者调用到了不正确的字符串,等等,可以使用排除法,挨个去掉控件,直到发现error message消失或者id能在R.java中自动生成。
7.删掉gen文件夹,使R.java重新自动生成一次,如果不能生成,继续检查layout的xml文件是否有如上不易发觉的问题
8.Clean project ,重新build,或者重新import project。
9.重启eclipse
10.重启电脑,以防Android 虚拟机的问题


我按照上述步骤重复后始终没有发现问题;
后怀疑是fail的那个包的R.java没有生成导致,此时问题演变成了让fail的包的R文件生成的问题(此方法我最后也没有成功让他生成);
在fail的那个包中新建一个activity,在oncreate中调用R.layout,发现竟然可以,检查成功的R文件发现他调用的就是另一个包的R文件,res中的资源已经生成在同一个R文件中,重新回到自己的代码中,删除所有调用R文件的地方,重新输入,在R文件选择时选择另外一个包的R文件,然后调用res中的资源成功!


结论:
调用资源时,先确认res中的xml,图片等都是正确的不会报错,然后寻找资源生成的R文件,调用时记得选择正确的有res的R文件,不要调用R.android等莫名其妙的R文件,这个问题就解掉了。


ps:有时编辑代码时注意不要复制粘贴,比如这个R文件的调用,复制粘贴时可能会默认成其他的R文件,从而导致报错。
0 0