TL; DR,如果出现错误“包R不存在”,则可能的原因是
- XML资源文件中的一些错误
->修复XML错误
- 当前包与
R包不同(请参阅package
AndroidManifest.xml中的属性)
->导入R类,例如import com.example.android.R;
->或在源中使用适当的包,例如package com.example.android;
->或将AndroidManifest.xml中的包属性更改为
<manifest xmlns:android="..." package="com.example.android" ...>,如果合适
- 使用的
RID来自系统资源
->不导入android.R,但是给有问题的ID加上前缀android.,例如,android.R.layout.simple_list_item_2
您当然可以导入android.R而不是给ID加上前缀,但是您不能再导入应用程序R类,而必须给应用ID加上前缀com.example.android.R.id.main_menu。
该R 班是从应用程序的资源自动生成。它包含id这些资源的,并包含在<manifest>
相应AndroidManifest.xml文件的标记中命名的包中
。
如果资源XML文件中没有错误,R.java则将在下面的包子目录中生成源并进行gen/编译。
包中还有另一个R类android。此类android.R包含一些嵌套类,这些嵌套类又包含ids和其他系统资源值。
要在Java中使用类,必须使用整个包来命名该类,例如
java.util.List<Object> list = new java.util.ArrayList<Object>();
或导入类,然后不带包使用它
import java.util.List;
import java.util.ArrayList;
List<Object> list = new ArrayList<Object>();
如果当前类和使用的类都在同一个包中,则也可以使用一个类而不用命名该包,例如
package com.example.android;
public class A {
/* ... */
}
package com.example.android;
public class B {
public void useA() {
A a = new A();
}
}