2013-07-19 146 views
4

我已經在xml中設置了10個按鈕並添加到主要活動中。我只顯示2.所有按鈕只是改變一個變量和按鈕的顏色。有沒有一種方法將所有按鈕分組到一個onclicklistener並使用開關來檢查哪個按鈕被按下。使用單獨的onclicklistener似乎是分配的腰部空間。按鈕數組onclicklistener

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    f1 =(Button) findViewById(R.id.f1); 
    f2 =(Button) findViewById(R.id.f2); 

    f1.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      clearbutton(); 
      f1.setBackgroundColor(Color.RED); 
      intbtnSelect=0; 
     } 
    }); 

    f2.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      clearbutton(); 
      f2.setBackgroundColor(Color.RED); 
      intbtnSelect=1; 
     } 
    }); 

回答

6

您可以在您的Activity中實施OnClickListener。例如

public class MyActivity extends Activity implements View.OnClickListener {  
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     f1 =(Button) findViewById(R.id.f1); 
     f1.setOnClickListener(this); 

     f2 =(Button) findViewById(R.id.f2); 
     f2.setOnClickListener(this); 
    } 
} 

他們,你必須實現在view.getId OnClick方法和開關():

@Override 
public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.f1: 
     // your code here 
     break; 
    case R.id.f2: 
     // your code here 
     break; 
    } 
} 
0

在你的XML,你所有的按鈕:

android:onclick="myClick" 

在您的活動:

public void onClick (View v){ 
    Button clickedButton = (Button) v; 
    //Do wathever you want with your Button 
    clickedButton.setBackgroundColor(Color.RED); 
    // and you could also switch(v.getId()) if really needed. 
} 

You co uld還根據黑帶建議實現了View.OnClickListener,它僅取決於您的偏好。

我個人很喜歡保持清潔的Java代碼,但這取決於你!

我想這兩種方法沒有什麼好/錯。

0

讓你的活動執行View.OnClickListener然後你必須添加一個方法onClick(View view)

在創建按鈕,你只需要添加此行

button.setOnClickListener(this),所以只要單擊一個按鈕,它會調用你的活動的onClick()方法。您可以使用view.getId()來查看單擊了哪個按鈕。

代碼:

//的onCreate() - 無論是動態創建按鈕,或者使用它們findViewById(發現)和分配上點擊收聽

for(int i = 0; i < MAX_BUTTONS; i++){ 
    // Create a button here 
    button.setOnClickListener(this); 
} 

//的onClick()

switch(view.getId(){ 
    case R.id.btn_one: 
     // do something 
     break; 
    ... 
} 
0
****just implement View.OnClickListener and override the onClick(View v) as 
    public class YourActivity implements Activity implements View.OnClickListener 
    { 
    super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     f1 =(Button) findViewById(R.id.f1); 
     f2 =(Button) findViewById(R.id.f2); 
     f1.setOnClickListener(this); 
     f2.setOnClickListener(this); 

      @Override 
     public void onClick(View v) { 
     // TODO Auto-generated method stub 

      switch(v.getId()) 
      { 
      case R.id.f1: //your implementation 
      break; 
      case R.id.f2: //your implementation 
      break; 
      } 
     } 
    } 
+0

非常新的eclipse和android。我已經嘗試了所有這些,但得到了很多錯誤。我需要多學習一點。任何人都可以給我一個完整的按鈕數組單擊項目,我可以導入到Eclipse並查看技巧。我喜歡android:onclick =「onButtonClicked」選項再次感謝所有代碼示例。如果有人可以給我發電子郵件[email protected]那會很棒。 – Bobby

0

在您的活動中定義了一個像這樣的全局可見性。

private OnClickLister listener = new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      clearbutton(); 
      ((Button)v).setBackgroundColor(Color.RED); 
      intbtnSelect=v.getTag(); 


     } 
    } 

setTag()數據像1-2-3 ------無論

,並設置爲所有按鈕這個監聽器佈局每個按鈕。

f1 =(Button) findViewById(R.id.f1); 
f1.setTag(1); 
f2 =(Button) findViewById(R.id.f2); 
f2.setTag(2); 
f1.setOnClickListener(listener); 
f2.setOnClickListener(listener); 

所以,當你按下按鈕時,intbtnSelect將獲得按鈕的標記。您不需要從您的活動中實現View.OnClickListener。

+0

我更喜歡@blackbelt替代方案,實現OnClickListner而不是保留一個全局變量 – MatheusJardimB

0

考慮到Android的官方文檔: http://developer.android.com/guide/topics/ui/controls/button.html

您在android聲明的方法:onclick屬性必須完全有 簽名如上圖所示。具體而言,該方法必須:

是公共

返回void

定義視圖作爲其唯一的參數(這將 是被點擊查看)

所以,在XML提及方法名稱

android:onclick="onButtonClicked" 

活動:

public void onButtonClicked(View v) { 
    switch (v.getId()) { 
    case R.id.Button1: 

    break; 
    case R.id.Button2: 

    break; 
    . 
    . 
    . 
    . and so on 
    case R.id.Button10: 

    break; 
    } 
} 
0

我有同樣的問題,但我找到了最好的解決方案(至少對我來說) 首先你需要創建按鈕列表,則INT ID的數組

Button[] listBtn = new Button[3]; 
    IntId[] idList = {R.id.btn1, R.id.btn2, R.id.btn3}; 

    for(int i = 0 ; i < listBtn.length ; i++) 
     listBtn[i] = (Button) findViewById (idList[i]); 

    for(Button btn:listBtn) 
     btn.setOnClickListener(btnListener); 

    ....... 

    private View.OnClickListener btnListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      for(int i = 0 ; i < listBtn.length ; i++){ 

       if(v.getId() == idArray[i]){ 

        //do something 
        String str = "Button number : "+ i; 
        Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show(); 
       } 
      } 

     } 
    }; 

`

0
public class ExampleActivity extends AppCompatActivity implements View.Onclicklistener { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    f1 =(Button) findViewById(R.id.f1); 
    f2 =(Button) findViewById(R.id.f2); 
    Utils.setObjectOnClickListener(this, f1, f2); 

@Override 
    public void onClick(View view) { 
    Intent intent = null; 
    switch (view.getId()) { 
     case R.id.f1: 
     // Do your code here 
     break; 
     case R.id.f2: 
     // Do your code here 
     break; 
} 

} 

In your Utils.class define this method 

public static void setObjectOnClickListener(View.OnClickListener listener, View... views) { 
     for (View view : views) { 
      view.setOnClickListener(listener); 
     } 
    }