2010-09-15 70 views
17

我正在尋找方法來減少我在應用程序中稱爲「ID污染」的方法。從我所知道的來看,R.id對於應用程序來說是全局的,所以在每個活動中,我通常都會爲元素創建唯一的資源ID值,即使我有許多相同的事情。舉例來說,如果我有三個活動課,每一個保存和取消按鈕,我會定義六個獨特的ID爲R.id像:R.id值的範圍

R.id.actOne_save 
R.id.actOne_cancel 
R.id.actTwo_save 
R.id.actTwo_cancel 
R.id.actThree_save 
R.id.actThree_cancel 

這似乎不需要我,我真的應該只需要兩個上運行任何活動。在生成資源ID時,您都使用了哪些做法?你在活動之間重複使用它們嗎?如果兩個Activites(可能是一個暫停的和一個前景)在同一時間存在一個id,那麼可以嗎?我害怕怪異的行爲,就像點擊按鈕觸擊太多聽衆一樣!

回答

20

你可以在多個元素中使用相同的id,只要它們不在同一個視圖中。所以,你所有的保存按鈕都可以有btn_save的ID,只要在同一個佈局文件中沒有兩個,或者附加布局,那麼你很好。

+2

謝謝,這是有道理給findViewById()從一個活動或視圖,而不是應用程序調用。乾杯! – Devunwired 2010-09-16 14:54:47

+1

目前只有50%是真實的,因爲您可以在編輯器中看到來自外部活動的R.ids,因此您可能認爲其中一個是您的,即使它不存在於您的活動中。 – user250343 2012-02-01 08:59:52

+0

@Martyn,你在「相同的觀點」中究竟是什麼意思?如果我有一個包含2個片段佈局的活動佈局,每個片段都包含一個'id =「@ + id/button_ok」,這會是一個問題,因爲它們共享相同的父視圖? – bcorso 2014-08-31 18:14:52

4

我用:

R.id.activityName_type_action

其中類型可以是[BTN | txtview |的EditText |列表視圖...]

和行動是一樣的東西[保存| del | accept | name | pin ...]

這是相當詳細的,但這樣我可以從活動中猜出標識符名稱,而不必連續檢查xml佈局。

例如:

R.id.loginpin_btn_accept

R.id.loginpin_txtview_pin

1

其他的答案會的工作,但你也可以做一個save_button.xml在佈局文件夾,用作爲根標籤的<Button>。然後在那些你需要的地方引用那個人的身份證。這意味着你只需要定義一個「保存」按鈕,並在任何地方使用它。