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" ...>, если это необходимо
- используемые
Rидентификаторы взяты из системных ресурсов
-> не импортировать android.R, а использовать префикс для идентификаторов-нарушителей android., например, android.R.layout.simple_list_item_2
вы можете импортировать android.Rвместо префикса идентификаторов, конечно, но тогда вы больше не сможете импортировать Rкласс приложения и должны иметь префикс идентификаторов приложений, например com.example.android.R.id.main_menu.
R Класс автоматически генерируется из ресурсов приложения. Он содержит ids для этих ресурсов и содержится в пакете, названном в
<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();
}
}