我希望能夠遍歷生成的R文件中的所有字段。Android:以編程方式遍歷資源ID
喜歡的東西:
for(int id : R.id.getAllFields()){
//Do something with id, like create a view for each image
}
我嘗試過反映,但我似乎無法加載包含真實R類別內特定的內部類。因此,舉例來說,這不會爲我工作:
Class c = Class.forName("packageName.R.id")
我可以在R類本身反映,但我需要的ID類中的字段。
我也嘗試通過Resources類查找,但在那裏找不到任何東西。在這種情況下,似乎可以獲取resourceID並獲取該id的字符串名稱,或者獲取字符串名稱並獲取相應的resourceID。我找不到像這樣的東西:
int[] Resources.getAllResourceIDs()
也許我正在討論這個錯誤。或者,也許我不應該打手動鍵入方式全部,例如:
int[] myIds = {R.id.firstResource, R.id.secondResource}
這種方法與我的UI設計師的工作時,不是那麼靈活的缺點。每當他向XML文件添加新資源時,我都必須更新代碼。顯然不是太痛苦,但它仍然很好,它似乎應該是可行的。
編輯:
低於約ViewGroup.getChildCount()/ ViewGroup.getChildAt()是行之有效的答案。但是,我還必須找到一種方法來實例化我的XML ViewGroup/Layout。要做到這一點,請嘗試如下:
LayoutInflater li = MyActivity.getLayoutInflater();
ViewGroup vg = (ViewGroup) li.inflate(R.layout.main, null);
我並不是說這是表露無疑,但恕我直言,事實上,你覺得你需要問這個問題意味着你可能做有問題。你能詳細說明你的用例嗎?我只是想不出爲什麼我想要訪問在整個應用程序中定義的所有ID。 – Qberticus 2010-08-23 06:45:35
我不想訪問所有的id,而是使用特定名稱(例如R.imageViewIds)的所有資源ID。這樣,在我的代碼中,我可以在一個for循環中添加一個事件監聽器或其他任何對象。我的用戶界面將有多個ImageViews,將全部響應事件,如果我可以訪問所有這些ImageView而不用手動編碼每個名稱,將會很好 (例如 IView1.setListener(myListener); IView2.setListener(myListener );) 此外,如果我的UI設計者決定重命名XML文件中的東西,那麼我將不必重構我的代碼。 – 2010-08-23 06:57:33