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();
}
}