TL; DR , jeśli pojawi się błąd „pakiet R nie istnieje”, możliwe przyczyny to
- jakiś błąd w plikach zasobów XML
-> napraw błędy XML
- aktualny pakiet różni się od
Rpakietu (patrz package
atrybut w AndroidManifest.xml)
-> importuj Rklasę, np. import com.example.android.R;
-> lub użyj odpowiedniego pakietu w swoim źródle, np. package com.example.android;
-> lub zmień atrybut pakietu w AndroidManifest.xml na
<manifest xmlns:android="..." package="com.example.android" ...>, jeśli jest to właściwe
- używane
Ridentyfikatory pochodzą z zasobów systemowych
-> nie importuj android.R, ale poprzedzaj identyfikatory naruszające zasady android.np. android.R.layout.simple_list_item_2
możesz android.Roczywiście importować zamiast poprzedzać identyfikatory, ale wtedy nie możesz już importować Rklasy aplikacji i musisz poprzedzić identyfikatory aplikacji, np. com.example.android.R.id.main_menu.
R Klasa jest generowana automatycznie z zasobów aplikacji. Zawiera ids dla tych zasobów i jest zawarty w pakiecie wymienionym w
<manifest>
tagu w odpowiednim AndroidManifest.xmlpliku.
Jeśli nie ma błędów w plikach XML zasobów, R.javaźródło zostanie wygenerowane w podkatalogu pakietu poniżej gen/i skompilowane.
W pakiecie znajduje się inna Rklasa android. Ta android.Rklasa zawiera kilka zagnieżdżonych klas, które z kolei zawierają ids i inne wartości dla zasobów systemowych .
Aby użyć klasy w Javie, musisz nazwać klasę całym pakietem, np
java.util.List<Object> list = new java.util.ArrayList<Object>();
lub zaimportuj klasę, a następnie użyj jej bez pakietu
import java.util.List;
import java.util.ArrayList;
List<Object> list = new ArrayList<Object>();
Możesz również użyć klasy bez nazywania pakietu, jeśli zarówno aktualna klasa, jak i używana klasa znajdują się w tym samym pakiecie, np.
package com.example.android;
public class A {
/* ... */
}
package com.example.android;
public class B {
public void useA() {
A a = new A();
}
}