views:

96

answers:

3

I find myself doing things like this all the time:

    Button button1 = (Button) findViewById(R.id.button1);
    Button button2 = (Button) findViewById(R.id.button2);
    Button button3 = (Button) findViewById(R.id.button3);

    button1.setOnClickListener(menuButtonListener);
    button2.setOnClickListener(menuButtonListener);
    button3.setOnClickListener(menuButtonListener);
...

and

   private OnClickListener myButtonListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
      switch(v.getId()){
       case R.id.button1 :
    ...

Is there a better way to set the OnClickListener?

+3  A: 

You can also set it in your layout xml using the android:onclick attribute.

android:onClick="onClick"

Then in your activity class add the onClick method.

public void onClick(View v) {
...

Here's the documentation.

aprock
Ah, nice :) Short and effective. I like it!
mseo
A: 

Have your class implement `View.OnClickListener', like

public class MyActivity extends Activity implements View.OnClickListener {

    Button button1, button2, button3;

    @Override
    public void onCreate(Bundle bundle) {
        super.onCreate();

        ...

        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3);

        button1.setOnClickListener(this);
        button2.setOnClickListener(this);
        button3.setOnClickListener(this);
   }

   @Override
   public void onClick(View v) {
       switch(v.getId()) {
           case R.id.button1:
           // do stuff;
           break;
           case R.id.button2:
           // do stuff;
           break;
       ...
   }
}
cfei
Well ... doesn't save me a lot of work. It's another possibility to do it, but it isn't really shorter or more elegant than my approach.
mseo
+1  A: 

It should be noted, that

android:onclick="onClick"

requires at least Andoid SDK 1.6. So if you want your App to be accessible to as big audience as possible, you probably want to write your App against Android 1.6. Unless your App requires a feature which is only available in 1.6+. So while your first attempt is bit more of work, it has greater backwards compatibility. I usually do it the way you do, to keep my Apps 1.5 comptaible.

Edit: It's easy to overlook this, if you set up Android 2.2 as SDK in your projects settings, but set minSDK version to 3 (1.5), as it doesn't give compiler errors.

Tseng