2011-07-13 35 views
10

Tôi có một ứng dụng Android sử dụng thành phần thư viện để chọn biểu tượng và gán cho nút.
Tập biểu tượng nằm ở res/drawable thư mục và được truy cập trong bộ sưu tập với adapter điển hình của hướng dẫn:Android: thay đổi id có thể kéo sau khi tài nguyên sửa đổi

private Integer[] Imgid = { 
    R.drawable.icon_home, 
    R.drawable.icon_home2, 
    ... 
} 

Sau một biểu tượng lựa chọn, tôi lưu trữ các thiết lập trong một db với id của các nút và các các drawable.
Tất cả các công việc đã hoàn thành, nhưng tôi đã nhận thấy rằng nếu tôi muốn thêm hoặc sửa đổi bộ biểu tượng hoặc tài nguyên nói chung về ứng dụng của tôi, id của tài nguyên cũ có thể thay đổi, vì vậy các tùy chọn trong db tham chiếu đến biểu tượng sai.
Có cách nào để buộc id cũ của lớp R nên chúng không thay đổi trong tương lai không? Hoặc là có một cách khác để quản lý các mục của galley thành phần với một thuộc tính hơn id? (Có thể tên chuỗi và phản ánh?)

Cảm ơn trước

Trả lời

0

Bạn không nên dựa vào những giá trị thực tế của R.drawable.* thuộc tính.
Tạo id riêng của bạn thay (ví dụ 1 tương ứng với R.drawable.icon_home và 2 tương ứng với R.drawable.icon_home2)

Edit:
String name và phản xạ nên làm việc quá, nhưng nó có thể là một overkill chút bạn chỉ có một vài biểu tượng .

12

Bạn có thể lưu tên của drawable trong cơ sở dữ liệu nếu bạn không có kế hoạch thay đổi điều đó. getResourceEntryName trả về tên từ id tài nguyên:

Resources resources = getResources(); 
String name = resources.getResourceEntryName(R.drawable.icon); 

Và bạn có thể lấy lại id nguồn từ tên với getIdentifier:

int resId = resources.getIdentifier(name, "drawable", "your.package.name"); 
+0

thats kẻ câu trả lời đúng. android thay đổi id của tệp r động. nếu bạn muốn một mục tĩnh sử dụng tên tài nguyên như đã nói bởi kriz. id không tĩnh và không có cách nào để làm cho nó tĩnh. – masi

Các vấn đề liên quan