2010-09-06 30 views
29

Làm cách nào tôi có thể thực hiện việc này:Tài nguyên động Đang tải Android

Tôi đang tìm cách mở tài nguyên chỉ được xác định khi chỉ chạy trong thời gian chạy.

Hãy để tôi giải thích chi tiết hơn

Tôi muốn có một XML tham chiếu đến một loạt các file XML khác trong gói ứng dụng ứng dụng.

Với mục đích giải thích, giả sử XML chính là tệp main.xml và XML còn lại là tệp tin1.xml file2.xml, tệpX.xml.

Điều tôi muốn là đọc tệp main.xml, hãy trích xuất tên của XML mà tôi muốn (tệpX.xml) chẳng hạn. Và sau đó đọc fileX.XML.

Vấn đề tôi phải đối mặt là những gì tôi trích xuất hình thức main.xml là một chuỗi và tôi không thể tìm thấy một cách để thay đổi điều đó để R.raw.nameOfTheFile

Bất kỳ ai có một ý tưởng?

Tôi không muốn:

  • tập hợp lại tất cả mọi thứ trong một tập tin XML lớn
  • hardcode main.xml trong một trường hợp chuyển đổi lớn liên kết một số/chuỗi ID tài nguyên
+0

tôi gặp phải sự cố tương tự nhưng tôi không nhận được bất kỳ câu trả lời nào được chấp nhận cho việc này. Ai có thể bắt đầu tiền thưởng cho câu hỏi này? –

Trả lời

51

tôi đã không sử dụng nó với file nguyên gốc hay file layout xml, nhưng đối với drawables tôi sử dụng này:

getResources().getIdentifier("fileX", "drawable","com.yourapppackage.www"); 

để lấy mã định danh (R.id) của tài nguyên. Bạn cần phải thay thế drawable bằng một thứ khác, có thể là raw hoặc layout (chưa được kiểm tra).

+0

Cảm ơn câu trả lời cho công việc tuyệt vời. Đối với những người trong cùng một trường hợp [đây là một lời giải thích tốt về chủ đề] (http://www.anddev.org/tinytut_-_get_resources_by_name__getidentifier_-t460.html) (một khi tôi đã có tên của chức năng nó đã được đơn giản): ' getResources(). getIdentifier ("tệpX", "thô", gói ứng dụng); ' –

+1

Liên kết chết? @JasonRogers Ah, nvm - nó phải là http://www.anddev.org/tinytut_-get_resources_by_name__getidentifier-t460.html – aaronsnoswell

+1

không có liên kết không chết casperOne xóa bài đăng của tôi và thay đổi nó thành một nhận xét mà không dành thời gian để làm điều đó một cách chính xác (aka liên kết bị hỏng) ở đây là liên kết: http://www.anddev.org/tinytut_-_get_resources_by_name__getidentifier_-t460.html –

23

tôi đã viết phương pháp này tiện dụng ít helper để đóng gói này:

public static String getResourceString(String name, Context context) { 
    int nameResourceID = context.getResources().getIdentifier(name, "string", context.getApplicationInfo().packageName); 
    if (nameResourceID == 0) { 
     throw new IllegalArgumentException("No resource string found with name " + name); 
    } else { 
     return context.getString(nameResourceID); 
    } 
} 
+0

Rất hữu ích, cảm ơn, nhưng không bao giờ chúng tôi muốn một chuỗi. đôi khi một luồng sẽ tốt hơn. –

6

Có phương pháp khác:

int drawableId = R.drawable.class.getField("file1").getInt(null); 

Theo this blog nó nhanh hơn so với sử dụng getIdentifier 5x lần.

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