2012-09-08 34 views
61

我是Android開發新手。在圖像中使用相同的ID並在不同的Layout XML文件中使用TextViews可以嗎?我可以在Android的不同佈局中使用相同的ID嗎?

當Eclipse自動列出它們對我來說,它列出了從項目中的所有佈局變量,因此將它碰撞?到目前爲止,我還沒有注意到在不同的佈局中使用相同的ID有任何問題,但我長期關注。

+0

僅供參考:考慮[使用數據綁定](https://medium.com/google-developers/no-more-findviewbyid-457457644885) – Pavel

回答

66

建議您對不同的佈局使用不同的ID。從長遠來看,當你有很多佈局,併爲此需要很多ID時,區分它們會變得非常複雜。

我通常這樣命名我的ID:layoutName_elementId

它適用於我很容易地找到我正在尋找的id,尤其是當使用自動完成時(我知道我在工作的佈局是什麼,但我不知道id;在這種情況下,我的命名策略,我只鍵入佈局名稱,它會帶來該佈局的所有ID)。在佈局和IDS

更多信息,可以發現here

快樂編碼,

+1

尋找什麼問題讓我們說'ok_button'在你的每一個活動?如果你知道你正在尋找的聊天,那麼Autocompletion更清晰。 –

102

簡答:是的,你可以。

龍答:你可以這樣做,因爲當你使用findViewById()去佈局的一部分的參考,該方法僅查找在當前充氣佈局視圖。因此,即使您在另一個佈局中使用相同ID的其他視圖,Android也不會在此處查找。

+11

您能否給出更長的答案?由於R.id.layout_id是一個靜態整數,並且是在編譯時預先確定的,所以findViewById()將不知道當前充氣的佈局。 – Chloe

+11

爲了解決這個問題的其他人,我想回答Chloe的請求。 ID對於每個視圖都是相同的,但在相同的活動中不會出現兩次。作爲一個比喻,考慮一下如果我給了你一堆文件,所有這些文件都帶有一堆數字,會發生什麼。其中幾張紙上寫有數字4。你正在看一張牀單,我要求你繞4圈。這很簡單。現在你看另一張帶有4的紙張。你也可以找到並循環。數字是事先定義的並不重要。 –

+3

我不同意泰德的評論,你可以同時在同一個活動上運行兩個具有相同ID的組件。我剛剛在應用程序中遇到了問題,我在主要活動中同時使用了兩個不同的ViewPager。當我嘗試檢索當前顯示ID的ViewPager時,它實際上檢索到在後臺運行的另一個ViewPager。我通過簡單地使這兩個ID是唯一的來解決問題。 –

12

據開發者API指南:

的ID不一定是整個樹唯一的,但它應該是 您正在搜索的樹的部分中是唯一的(其中可能通常是整個樹,因此最好在 時是完全唯一的)。

所以簡短的回答是,它不是強制性的,但避免可能的衝突是一種好的做法。

相關問題