(Android) ボタンをクリックした時の実装方法

いろいろな方法があるのでまとめてみました。
実装パターンとしては以下の4つが考えられますが、1と2以外はほとんど使わないと思います。

  1. Activityに実装(implements View.OnClickListener)
  2. Layoutファイルにメソッド指定(android:onClick)
  3. 無名クラス
  4. 有名クラス

Activityに実装

(main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <Button
        android:text="Button"
	android:id="@+id/button"
	android:layout_height="wrap_content"
	android:layout_width="match_parent"
	/>
</LinearLayout>

(ソース)

public class ButtonOnClick extends Activity implements View.OnClickListener {	
    private Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        button = (Button)findViewById(R.id.button1);
        button.setOnClickListener(this);
    }
    
    @Override
    public void onClick(View v) {
        switch(v.getId()) {
	    case R.id.button:
                Toast.makeText(ButtonOnClick.this, "Hello! Android!!", Toast.LENGTH_LONG).show();
		break;
        }		
    }
}

Layoutファイルにメソッド指定

(main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >
    <Button
        android:text="Button"
	android:id="@+id/button"
	android:layout_height="wrap_content"
	android:layout_width="match_parent"
	android:onClick="showToast"
        />
</LinearLayout>

(ソース)

public class ButtonOnClick extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    public void showToast(View view) {
    	Toast.makeText(ButtonOnClick.this, "Hello! Android!!", Toast.LENGTH_LONG).show();
    }
}

無名クラス

(main.xml)
「Activityに実装」と同じ
(ソース)

public class ButtonOnClick extends Activity {
    private Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
            @Override
	    public void onClick(View v) {
                Toast.makeText(ButtonOnClick.this, "Hello! Android!!", Toast.LENGTH_LONG).show();
	    }        	
        });
    } 
}

有名クラス

(main.xml)
「Activityに実装」と同じ
(ソース)

public class ButtonOnClick extends Activity {	
    private Button button;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        button = (Button)findViewById(R.id.button);
        button.setOnClickListener(new onClickButton(this));
    }    
}

class onClickButton implements OnClickListener {
    private Context _context;
	
    public onClickButton(Context context) {
        _context = context;
    }

    @Override
    public void onClick(View v) {
        Toast.makeText(_context, "Hello! Android!!", Toast.LENGTH_LONG).show();		
    }
}

まとめ

ソースの見易さを考えると、「1. Activityに実装」が良いと思います。
でも個人的にはコーディング量が少ないので、「2. Layoutファイルにメソッド指定」で書くことが多かったりします。