TL; DR , nếu bạn gặp lỗi "gói R không tồn tại", lý do có thể là
- một số lỗi trong tệp tài nguyên XML
-> sửa lỗi XML
- gói hiện tại khác với
Rgói (xem package
thuộc tính trong AndroidManifest.xml)
-> nhập Rlớp, ví dụ import com.example.android.R;
-> hoặc sử dụng gói thích hợp trong nguồn của bạn, ví dụ package com.example.android;
-> hoặc thay đổi thuộc tính gói trong AndroidManifest.xml thành
<manifest xmlns:android="..." package="com.example.android" ...>, nếu phù hợp
- các
Rid đã sử dụng là từ tài nguyên hệ thống
-> không nhập android.R, nhưng đặt tiền tố cho các id vi phạm android., ví dụ: Tất nhiên, android.R.layout.simple_list_item_2
bạn có thể nhập android.Rthay vì đặt trước id, nhưng sau đó bạn không thể nhập Rlớp ứng dụng nữa và phải đặt tiền tố cho id ứng dụng, ví dụ: com.example.android.R.id.main_menu.
Các R lớp học được tạo ra tự động từ các nguồn tài nguyên của ứng dụng. Nó chứa các ids cho các tài nguyên này và được chứa trong gói có tên trong
<manifest>
thẻ trong AndroidManifest.xmltệp tương ứng .
Nếu không có lỗi nào trong các tệp XML tài nguyên, thì R.javanguồn sẽ được tạo trong một thư mục con gói bên dưới gen/và được biên dịch.
Có một Rlớp khác nằm trong androidgói. Đây android.Rlớp có chứa một số lớp lồng nhau, do đó chứa ids và giá trị khác cho hệ thống tài nguyên.
Để sử dụng một lớp trong Java, bạn phải đặt tên lớp với toàn bộ gói, ví dụ:
java.util.List<Object> list = new java.util.ArrayList<Object>();
hoặc nhập lớp và sau đó sử dụng nó mà không cần gói
import java.util.List;
import java.util.ArrayList;
List<Object> list = new ArrayList<Object>();
Bạn cũng có thể sử dụng một lớp mà không cần đặt tên cho gói, nếu cả lớp hiện tại và lớp đã sử dụng đều nằm trong cùng một gói, ví dụ:
package com.example.android;
public class A {
/* ... */
}
package com.example.android;
public class B {
public void useA() {
A a = new A();
}
}