2012-04-21 57 views
1

我知道如何通過調用setID()來動態分配ID。對於ID是唯一的,我曾經使用ids.xml並從預先生成的ID池中傳遞給setID() ID。Android - 動態分配和檢索ID

問題1:有什麼辦法來分配的ID不利用ids.xml因爲我不能預測有多少的ID我需要在運行?

我試圖通過基於其標籤的哈希動態分配每一個的ID(每個標籤是唯一的)繞過問題1提出的第一個問題,但目前還沒有辦法gaurantee該ID的不會是與在R.java中生成的ID自動碰撞。

問題1.1:如何解決ID命名衝突?

問題2:假設我有我動態分配和生成的ID值。由於上述ID未出現在R.id中,因此findViewById()將不適用於檢索視圖。因此,當ID已知時如何檢索視圖?

答2:,您仍然可以通過後才onCreate()返回控制(終止)及其相應的ID來檢索視圖。

回答

0

有什麼辦法來分配的ID不利用ids.xml因爲我 不能預測有多少的ID我需要在運行?

這保證了每個視圖具有一個唯一的ID

for(int i =0 ; i < yourIDcount ; i++){ 
yourView.setId(i); 
} 

如何可以當ID是已知的,圖中檢索?

View.findViewById(yourView.getId()); 

可以用來讓您的視圖的ID,因爲每個視圖都有一個唯一的ID,你可以回到你想要的看法..這是在運行時創建

詞動態的手段,因爲你分配id在onCreate它被分配爲視圖ID,因爲onCreate只有一次活動被創建時被調用,你可以確保你分配的ID保持不變...

+0

關於'for'循環,你不能確定你提供一個唯一的ID!也許第i個值已被使用。對'getId()'的批評,我明確寫道,我有ID,不需要檢索ID,而是希望檢索相應的視圖。無論如何,感謝您的幫助。 – MrRoth 2012-04-21 17:38:03

+0

你似乎誤解了,你可以使用findViewById(yourView.getId())來取回視圖的一個實例 – 2012-04-21 17:44:29

+0

不可以!這裏是來自Android文檔的引用_查找由在onCreate(Bundle)中處理的XML **中的id屬性標識的視圖**。_請注意,創建應用程序時此ID不存在。 – MrRoth 2012-04-21 17:56:42

7

從API級別17你可以得到一個通過致電

View.generateViewId() 

Details here.