2012-08-09 59 views
2

我想問一下關於整個ID系統如何在android中工作的很多問題。我查閱了View文檔,但對我的口味來說,描述太淺了。關於查看ID的問題一堆

  1. 有沒有一種模式,IDE(Eclipse的/ Netbeans的),當我使用android:id="@+id/..."如何生成的ID ?或者它是完全隨機的?

  2. 如果我以編程方式設置ids,那麼它是否會被上下文 類findViewById()函數找到?

  3. 如果對前一個問題的答案是肯定的,那麼如果我想 創造了大量的意見,但我希望他們能有後來識別不同的IDS ,然後至極一個是更好地使用? (回答 這個問題,這將是非常有用的知道了 前兩個答案)

    例如生成在儘可能大的範圍內隨機IDS:

    Random random = new Random(); 
    for(int i=0; i<100; i++) 
    { 
        View view = new View(someContext); 
        view.setId(random.nextInt(Integer.MAX_VALUE)); 
    } 
    

    或在某些設定的ID排序順序,例如:

    final int addToId = 5670; 
    for(int i=0; i<100; i++) 
    { 
        View view = new View(someContext); 
        view.setId(i+addToId); 
    } 
    
  4. 此外,我想知道,會發生什麼,當你使用一個 LayoutInflater例如填充使用一個列表中每個項目的預定義xml佈局。然後你可以通過findViewById()得到getView()函數中的 子視圖。所以我 假設,你列表中的所有相同的視圖有 相同的ID。如果是這樣,那麼使用tag 屬性來區分膨脹佈局中的項目是否是一種好習慣?

對這些問題的任何明確的解釋將不勝感激!

回答

1
  1. @ + id/....創建一個id值,它位於應用程序名稱空間中。將其與@android:id/....對比,它位於android命名空間中。

  2. 當您在代碼中設置ID並將視圖元素添加到佈局時,它將變爲可通過代碼訪問。您將無法從xml中引用它不知道您想要使用隨機來生成您的ID嗎?認爲順序會更好,但即使如此,隨機ID的意義何在?你怎麼知道你指的是哪個視圖?

  3. 絕對使用標記選項,並期待使用ViewHolder模式來平滑滾動列表。如果您需要訪問它,則可以將該ID添加到視圖持有者類中,但無論如何通過用於填充列表的數據集都可以使用該ID。快速搜索將爲您提供大量示例。

+0

嗨!隨機/增加ID背後的基本思想是避免以某種方式添加重複的ID,而無需手動查找佈局xml中的所有修復ID,並檢查,如果新ID已經在其中。謝謝你的回答,但你能告訴我,這些id是如何產生的嗎?據我所知,就像我的第二種選擇:IDE選擇一個隨機數並添加一個新的ID。 – 2012-08-09 13:10:23

+0

如果你不添加一個ID,那麼你將無法通過ID訪問該視圖。你有沒有考慮給視圖添加一個標籤,然後通過標籤訪問?迭代通過孩子的選項是否可以找到你想要實現的解決方案?通常,如果您需要訪問層次結構中的特定視圖,則只需要一個id。如果視圖是列表或網格類型父對象,那麼您將通過適配器類來訪問子視圖,該適配器類將處理設置和檢索有問題的視圖。也許關於這個問題的上下文的進一步信息會有所幫助? – 2012-08-09 13:18:24

+0

我沒有具體記住,我試圖實現。事實是,問題出現了,當我爲RadioButtons寫封裝類時,創建類似RadioGroup的東西而不是View,只是處理按鈕檢查狀態。這個類處理,選擇和取消選擇按鈕的RadioButtons,當我開始測試它與更大量的RadioButtons時,我需要生成ids dinamically。然後我開始懷疑這些問題。再次感謝您的幫助,我認爲最重要的是,運行時生成的id可以通過findViewById()訪問。 – 2012-08-09 13:36:16