2010-09-27 102 views
7

我有一個xml佈局,它將在表格中顯示由textviews組成的網格。 textview名稱是cell00,cell01等。在運行時,我的程序將確定哪個單元需要更改。如何在運行時動態地或以編程方式創建findViewById parm

有沒有一種方法獲取格式的名稱,以便它可以在運行時傳遞給findViewById方法?例如,如果需要cell00,那麼如何在此代碼中生成parm?

TextView currcell = (TextView) findViewById(R.id.cell00) 

「cell」+00不會編譯,因爲findViewById方法不接受String類型。我不希望網格中的每個textview名稱都在程序中硬編碼 - 必須有更好的方法。

感謝您提供任何幫助。

+0

只是好奇你想通過在網格視圖上使用tableview來完成什麼? – schwiz 2010-09-27 19:30:29

+0

這個簡單的首次應用程序將顯示一個縱橫字謎的解決方案。我知道如何製作網格的唯一方法是在表格中使用textviews。 textview允許我在每個單元格中輸入數據,甚至使用HTML來獲得某些功能。我試圖找出如何製作專業的縱橫字謎網格,但最終接受失敗並放棄。我確信其他人使用比我更好的方法。我真的希望我知道如何製作一個真正漂亮的網格類型模板。 – greenset 2010-09-27 22:20:35

+0

@schwiz使用表格佈局而不是網格視圖的一個原因是如果您需要每行中的特定數量的項目。網格視圖只是將內容包裹在每行的末尾,所以連續的數字將根據屏幕的大小等而變化。 – 2010-09-27 22:35:29

回答

4

您可以使用反射來查找R.id中已命名變量的整數值。

Class clazz = R.id.class; 
Field f = clazz.getField("cell" + "00"); 
int id = f.getInt(null); // pass in null, since field is a static field. 
TextView currcell = (TextView) findViewById(id); 

請記住,反射可能會很慢。如果你做了很多,你可能想緩存值或想出不同的方式。

+0

非常有幫助。我非常感謝你的時間。我輸入了代碼並得到了一個乾淨的編譯。我應該在幾周前來到這個網站。 – greenset 2010-09-27 22:25:12

3
int id = getResources().getIdentifier("cell00", "id", getPackageName()); 
TextView currcell = (TextView) findViewById(id); 

與Mayra的方式一樣,代碼也使用反射,所以要小心。

+0

Ty爲建議。我正在嘗試兩種方式來查看哪種方式最適合我的需求。 – greenset 2010-09-28 10:24:22

相關問題