2012-12-17 30 views
5

Xem qua mọi câu hỏi, không thể làm cho nó hoạt động.nhận id bố trí từ chuỗi, sẽ không hoạt động

Tôi muốn đặt bố cục AppWidgets với giá trị của một chuỗi (Vì vậy, bố cục có thể được chuyển sang một bố cục khác bằng cách chỉ thay đổi chuỗi).

String NoteString = "R.layout.widget_blue".toString(); 

int resID = context.getResources().getIdentifier(NoteString, "layout", context.getPackageName()); 

RemoteViews views = new RemoteViews(context.getPackageName(), resID); 

không biết tại sao nó không hoạt động, phụ tùng chỉ nói: "phụ tùng vấn đề tải" ..

này hoạt động tốt:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_blue); 

Cảm ơn

+1

Bạn có thể thử tạo noteString chỉ '" widget_blue "' (vì vậy không có '" R.layout. "')? –

Trả lời

14

Trong để xây dựng ID tài nguyên từ các thành phần chuỗi, bạn phải chuyển các thành phần riêng lẻ thành getIdentifier(), không phải là ID đủ điều kiện làm thông số duy nhất:

//Get the ID for R.layout.widget_blue 
int resID = context.getResources().getIdentifier("widget_blue", "layout", context.getPackageName()); 

Sau đó, chỉ cần thay đổi tên thông số đầu tiên để có tài nguyên bố cục khác.

+0

cảm ơn người đàn ông !! nó đã làm việc – Jakob

1

Tại sao bạn sử dụng getIdentifier cho điều này? Vì bạn đã bao gồm chuỗi được mã hóa cứng trong đó, tại sao không chỉ sử dụng mã định danh tài nguyên được bao gồm, như bạn đã làm trong ví dụ thứ hai. Điều đó hiệu quả hơn nhiều, như đã nêu trong tài liệu về phương thức getIdentifier():

Lưu ý: việc sử dụng chức năng này không được khuyến khích. Nó là hiệu quả hơn nhiều để lấy tài nguyên bằng cách định danh hơn là tên.

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