2010-11-11 75 views
6

目前我小心地爲每個小部件使用不同的ID,但是如果我在不同的佈局xml文件中使用相同的id來處理一些小部件,我的findViewById調用會發生什麼?它會混淆並從錯誤的佈局文件返回一個小部件?如果我在不同佈局的多個小部件中使用相同的id,會發生什麼情況?

我問,因爲我想在其他視圖中包含視圖(帶有一排按鈕),那麼每個屏幕類都必須爲包含視圖上的每個按鈕分配一個稍微不同的行爲。但要做到這一點,他們會在同一個ID上調用findViewById。 比如目前我不喜歡這個在每個文件:

final ImageButton homeButton = (ImageButton)this.findViewById(R.id.rshome_button); 
homeButton.setOnClickListener(new BottomButtonClickListener()); 

final ImageButton hotButton = (ImageButton)this.findViewById(R.id.rshotlist_button); 
hotButton.setOnClickListener(new BottomButtonClickListener()); 

final ImageButton locButton = (ImageButton)this.findViewById(R.id.rsbot_map); 
locButton.setOnClickListener(new BottomButtonClickListener()); 

final ImageButton sendButton = (ImageButton)this.findViewById(R.id.rssend_button); 
sendButton.setOnClickListener(new BottomButtonClickListener()); 

但我改變R.id每個文件指向窗口小部件中的每個assiciated佈局。如果我可以使用一個R.id,那麼我不需要調整每個佈局文件和每個屏幕類。

感謝

回答

3

應該只要你不相同的活動實例兩種佈局被罰款。但從未嘗試過,我不想保證它。

但是,如果Android代碼生成器出錯,我不會感到驚訝,因爲它可能會嘗試在您的R.java文件中創建兩個R.id.rshome_button條目。

+1

那麼它是如何知道我們正在尋找哪一個? – GMsoF 2013-09-06 07:23:28

-1

您自己嘗試的最佳方式。

但是你做了setContentView(R.layout.your_layout);

所以,如果你findViewById它將在尋找與給定id的部件your_layout

這就是爲什麼你可以在不同的佈局中使用相同的ID。

+0

R.id.view_id是在運行setContentView()之前在編譯時生成的靜態整數。 – Chloe 2013-09-09 16:11:01

8

是的,您可以在不同的佈局中使用相同的id。事實上,這可能是一個很好的做法。

相關問題