2013-07-19 100 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); 
     } 
    }