2013-10-20 123 views
0

如果我有,例如,30個按鈕,並且我想爲它們中的每一個添加一個OnClickListener,我是否必須手動爲每個人執行button.setOnClickListener(this);?這看起來很混亂。有沒有一種方法來一次爲多個對象設置方法?

是否可以使用循環或其他?

+0

您可以在您的XML屬性中使用'android:onClick =「function_name」'。 –

+0

@GauravBhor有沒有辦法在Java中做到這一點? – RiThBo

+0

然後你必須手動設置'onClick'監聽器。如果你的按鈕id是一個序列,你可以使用for循環。 –

回答

8

看看這個代碼:

 Button[] b = new Button[30]; 

     for(int i=0; i < b.length; i++) 
     { 
      b[i].setOnClickListener(this); 
     } 

編輯:這一點,你需要使用下面的循環

 for(int i=0; i< b.length; i++){ 
      b[i] = (Button) findViewById(R.id.button+i); 
     } 
0

,以確定每個按鈕之前,可以實現onClickListener界面在你的活動,然後傾聽基於ID進行點擊。

public class MyClickClass implements OnClickListener { 
     @Override 
     public void onClick(View v) { 
      switch(v){ 
      case R.id.button1: 
      //some code 
      break; 

      case R.id.button2: 
      //some code 
      break; 
      } 
     } 
    } 
0

這裏,layout是對包含按鈕的父視圖組的引用。我還假設你的Activity擴展onClickListener(.setOnClickListener(this))。如果沒有,那麼只需傳遞一個對onclick()方法的引用即可。

for (int i = 0; i < layout.getChildCount(); i++) { 
    View v = layout.getChildAt(i); 
    Class c = v.getClass(); 
    if (c == Button.class) { 
     ((Button)v).setOnClickListener(this); 
    } 
} 

如果所有的按鈕都不存在於同一個視圖組中,可以稍作努力,使其成爲遞歸的。然後,您可以從根視圖組中進行遞歸。

1

如果您有不同的操作需要頂部設置到每個不同的按鈕,您可以使用onClickListener的數組,然後在循環中的每個按鈕上運行。以下示例假定按鈕的數量等於偵聽器的數量。

Button[] b = new Button[30]; 
onClickListener[] myListeners = new onClickListener[30]; 

{ 

//Initialize and add some code to each one of Listeners in the onClick method 

} 


for(onClickListener a: myListiners) 
{ 

    b[a.indexof].setOnClickListener(a); 

} 
相關問題