2013-07-26 77 views
1

嘿,我正在做一個Android應用程序,將有〜256按鈕。 因爲我不想爲每個人編寫相同的代碼,所以我認爲可以通過數組實現更簡單的解決方案。我在OnCreate方法來設置監聽器是:ANDROID處理大量按鈕與數組?

1 for (int i=1; i<32; i++) 
2    { 
3     button[i] = (Button)findViewById(R.id.button[i]); 
4     button[i].setOnTouchListener(this); 
5    } 

我設置的按鈕[]這樣的:Button[] button=new Button [64];

現在,月食告訴我在第3行「按鈕不能得到解決或不是場「它只是強調了單詞」按鈕「,所以我認爲它忽略/只是不識別[i](數組)的材料。

我的代碼的其餘部分似乎得到與完美,因爲它被認爲是一個對象(糾正我,如果我說的是錯的),但findViewById()與它沒有得到..

感謝您的回覆,亞歷克斯

+1

你不能這樣做。更好地動態添加按鈕。 –

+0

真的嗎?該死的..那麼你的意思是我應該在我的代碼中添加所有按鈕?會有區別嗎?我害怕重寫我的整個代碼,只是爲了注意到我再次站在同一個問題的前面。 – user2330482

回答

0

用戶「Horschtele」以完美的方式回答了它,但他自己刪除了他的答案(不知道爲什麼)。

Horschtele,如果你看了,我只想說這個解決方案是完美的!

我必須(或者至少我覺得我必須)爲每張桌子做這個,但是這樣可以節省我無限的時間。再次感謝Horschtele(你是德國人:)?)

我修改Horschtele的答案的版本,如果你已經在一個表的按鈕:

ViewGroup container = (ViewGroup) findViewById(R.id.tableRow1); 

      for(int i=0; i<container.getChildCount();i++){ 
       System.out.println(container.getChildCount()); 
      Button button = (Button)container.getChildAt(i); 
      button.setOnTouchListener(this); 
      } 

(不感到驚奇println的,你可以很容易地檢查系統是否正確識別您正在引用的容器)。

如果您有按鈕的排列走自己的路,那麼這是要走的路:你在你的解決方案提出

button[i] = (Button)container.getChildAt(i); 
button[i].setOnTouchListener(this); 
1

你不能這樣做。更好的方法是在代碼中動態添加按鈕。例如,

View parentView = (LinearLayout) findViewById(R.id.parentView); 
// declare button array above 
for (int i=1; i<32; i++) 
{ 
    Button btn = new Button(context); 
    // EDIT: adding a background resource 
    btn.setBackgroundResource(R.layout.button_layout); 
    btn.setText("This is my text"); 
    btn.setOnTouchListener(this); 
    button[i] = btn; 
} 
+0

謝謝你的回答,但我真的這樣做,它真的有用 - 它應該是錯誤的?如果你不相信我,我可以向你發送代碼。我不想像你說的那樣添加按鈕,因爲我在這些按鈕中使用了不同的圖像,並且我認爲通過XML來實現它更簡單 – user2330482