R คืออะไร:
ไม่มีอะไรลึกลับเกี่ยวกับ R มันเป็นเพียงคลาสที่มีคลาสย่อยคงที่มากมายเปิดขึ้นในคราสและดู (ภายใต้ gen /)
สมาชิกทุกคนของคลาสนี้เป็นหนึ่งในสองสิ่ง: 1) คลาสสุดท้ายแบบคงที่หรือ 2) จำนวนเต็มสุดท้ายแบบคงที่ซึ่งไม่ซ้ำกันเมื่อเทียบกับสมาชิกคนอื่น ๆ ในคลาสของตน
ทำไมมันถึงคลุมเครือ:
มันง่ายที่จะสับสนเพราะ R ถูกสร้างขึ้นโดยอัตโนมัติโดยมด มันเป็นความลับเพราะคุณไม่ควร "สัมผัส" ด้วยตนเอง (แน่นอนว่าคุณทำได้ แต่การเปลี่ยนแปลงของคุณจะถูกลบโดยอัตโนมัติเมื่อมีการสร้างใหม่) มันเป็นความลับเพิ่มเติมเนื่องจากบางครั้งคราสจะนำเข้าไฟล์ R มาตรฐานของ Android โดยอัตโนมัติ (ตามที่กล่าวไว้ในคำตอบด้านบน)
เหตุใดจึงเป็นสิ่งแรกที่ไม่สามารถแก้ไขได้เสมอ: R เป็นไปตามกฎของคลาส Java และแพ็กเกจไม่มีอะไรพิเศษเกี่ยวกับการที่ R ทำหน้าที่เกี่ยวกับการนำเข้า R จะถูกวางโดยอัตโนมัติในแพ็คเกจที่ระบุโดยรายการแพ็คเกจในไฟล์รายการของคุณ
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="package.which.will.contain.R.and.probably.the.main.package.in.the.application" android:versionName="8.6.2011" android:versionCode="1">
<uses-sdk android:minSdkVersion="13" />
หากต้องการดูว่าไฟล์ R ของคุณเป็นแพ็กเกจใดเพียงแค่เปิด gen / โฟลเดอร์ใน eclipse (มุมมองแพ็คเกจ) คุณจะเห็นแพคเกจหนึ่งรายการที่นั่นจะมีชื่อที่คุณระบุไว้ในรายการของคุณ ลองลบมันจะกลับมาหากรีซอร์สทั้งหมดของคุณเป็นไปตามกฎการตั้งชื่อที่ถูกต้องและไฟล์ xml ทั้งหมดของคุณเป็นไปตามกฎ xml ที่ถูกต้องและหากบิวด์เปิดใช้งานโดยอัตโนมัติใน eclipse
กุญแจสำคัญในการทำความเข้าใจไฟล์ R คือการตระหนักว่าไฟล์นั้นอยู่ในแพ็กเกจเดียวกันกับคลาสอื่น ๆ แม้ว่าจะอยู่ในไดเร็กทอรีอื่นก็ตามไฟล์อื่น ๆ ที่อยู่ในแพ็กเกจ "หลัก" ของคุณ หลังจากที่คุณเข้าใจสิ่งนี้และเข้าใจไวยากรณ์และการตั้งชื่อไฟล์ทรัพยากรการแก้ปัญหาด้วย R ก็ทำได้ง่ายๆ