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ระดับชั้นเรียนมีบางส่วนที่ซ้อนกันซึ่งจะประกอบด้วยidและค่าอื่น ๆ สำหรับระบบทรัพยากร
ในการใช้คลาสใน 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();
}
}