2011-09-28 117 views
1

假設我有一個應用程序,名稱爲button0,button1等類似的按鈕,直到button9。如何避免Android測試應用程序中的代碼重複?

如何在不重複代碼的情況下執行以下操作?

button0 = (Button) activity.findViewById(com.sample.SampleApp.R.id.button0); 
button1 = (Button) activity.findViewById(com.sample.SampleApp.R.id.button1); 
... 
button9 = (Button) activity.findViewById(com.sample.SampleApp.R.id.button9); 

我試圖使用反射,但代碼看起來不乾淨。

for (int i = 0; i <= 9; i++) { 
    String btnName = "button" + i; 
    /* do reflection stuff to link self.buttonX 
     with a reference to com.sample.SampleApp.R.id.buttonX */ 
} 

回答

1

下面的代碼是未經測試,但不妨一試:

Button[] buttons = new Button[]{button0, button1, button2, button3, button4, button5, button6, button7, button8, button9}; 
for (int i = 0; i < buttons.length, i++) { 
    buttons[i] = (Button) findViewById(getResources().getIdentifier("button" + i, "id", "com.sample.SampleApp")); 
} 

用的ArrayList(再次未經檢驗的 - 只是給你什麼,我的意思是一個想法):

ArrayList<Button> buttons = new ArrayList<Button>(); 
for (int i = 0; i < 10, i++) { 
    buttons.add(new Button(this)); 
    buttons.get(i) = (Button) findViewById(getResources().getIdentifier("button" + i, "id", "com.sample.SampleApp")); 
} 
+0

謝謝! getResources()。getIdentifier()會幫助很多,但有沒有辦法避免Button數組? – hgf

+0

我想你可以通過使用帶Button元素的ArrayList來清理它,但我認爲你不會比它更「乾淨」。我很想被證明是錯的,雖然:) –

+0

ArrayList根本沒有幫助,但你幫我看到,我不需要實例變量來引用UI元素,如果我可以創建一個局部變量來引用被測試的UI由findViewById發現的元素。謝謝。 – hgf