2012-05-29 42 views
0

我已經在包含9個按鈕的Android應用中定義了一個活動。每個按鈕都必須聽同一個事件監聽器。Android生成的ID真的是不可變的嗎?

看着生成的R類,它們的ID被定義:

public static final int btn1=0x7f040001; 
... 
public static final int btn1=0x7f040009; 

我的問題是:它是確定添加的聽衆循環的ID在一個for循環?

for (int i= R.id.btn1; i<=R.id.btn9;i++) 
{ 
    Button button = (Button)findViewById(i); 
    button.setOnTouchListener(new View.OnTouchListener() { 
     @Override public boolean onTouch(View v, MotionEvent event) { 
      ... 
     } 
    }); 
} 

還是有一些情況,其中id來獲取由編譯器重新分配,打破我的代碼?

我使用IntelliJ IDEA的環境來構建應用程序。

+2

不,不這樣做。您無法控制按鈕(或任何其他XML資源)如何分配整數ID。 – jmhend

回答

8

我擔心這會在你的R檔再生與非連續ID的事件非常糟糕的主意..你更好的選擇是通過

EX存儲包含您的ID和循環int數組。

int[] views = new int[] { R.id.btn1, R.id.btn2, R.id.btn3, ...... R.id.btn9 }; 

for (int i= 0; i< views.length ;i++) 
{ 
    Button button = (Button)findViewById(views[i]); 
    button.setOnTouchListener(new View.OnTouchListener() { 
     @Override public boolean onTouch(View v, MotionEvent event) { 
      ... 
     } 
    }); 
} 
+0

好主意,謝謝。我會這樣做。 –

+0

在這一點上,你可以做'for(int i:views)...'。無需使用'views.length'和'i ++'來解決問題。在你的循環中,你現在想要寫'findViewById(views [i])',而不僅僅是'i'。 –

+0

已更新,修復了findViewById。謝謝 :) – dymmeh