[Android] CheckBox:チェックボックスのクリックイベントを処理する

チェックボックスはクリックされるとイベントが実行され、アプリはそのイベントを受け取り、処理を実行することができます。ここでは、チェックボックスのクリックイベントを処理する方法について説明します。
広 告
目次
前提条件
動作確認端末
- Google Nexus 5 – 5.0.0 – API21(エミュレータ)
1. onClick属性でクリックイベントを処理する
チェックボックスのクリックイベントを受け取るためには、<CheckBox>タグのandroid:onClick属性を使います。この属性の値は、クリック時に呼ばれるJavaメソッド名になります。このチェックボックスを持つレイアウトを読み込んだActivityは、ここで定義したメソッドを実装しなければなりません。
サンプルコードを以下に示します。まずはレイアウトXML側の定義内容です。
res/layout/activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <CheckBox android:id="@+id/checkbox1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/checkbox1" android:onClick="onCheckboxClicked"/> <CheckBox android:id="@+id/checkbox2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/checkbox2" android:onClick="onCheckboxClicked" /> </LinearLayout>
次にJava側の実装内容です。android:onClick属性で定義したメソッドを宣言します。
java/<package name>/MainActivity.java
public class MainActivity extends Activity { … public void onCheckboxClicked(View view) { final boolean checked = ((CheckBox) view).isChecked(); switch(view.getId()) { case R.id.checkbox1: if (checked) { // チェックボックス1がチェックされる } else { // チェックボックス1のチェックが外される } break; case R.id.checkbox2: if (checked) { // チェックボックス2がチェックされる } else { // チェックボックス2のチェックが外される } break; } } }
Activity側で実装するメソッドは以下の条件でなければなりません。
- publicメソッド
- 戻り値はvoid
- 引数はViewオブジェクト1つ
引数にはクリックされたチェックボックスのインスタンスが渡されます。サンプルコードでは、チェックが付いたのか、外れたのか、をisChecked()メソッドを使って判定しています。
onClick属性
で定義したメソッド名をActivityで実装しなかった場合、画面のボタンをクリックするとNoSuchMethodExceptionの例外が発生します。
2. OnClickListenerでクリックイベントを処理する
JavaでView.OnClickListenerを使用することで、チェックボックスに対してクリックイベントリスナーを登録することができます。イベントリスナーとは、イベントが発生する動作するものです。イベントとは、今回のケースでは「ボタンをクリックする」を指します。この方式は、Fragmentでクリックイベントを処理する必要がある場合など必要になることがあります。
View.OnClickListenerのオブジェクトを作成し、CheckBox
オブジェクトにsetOnClickListener()メソッドで設定します。
以下がサンプルコードです。
java/<package name>/MainActivity.java
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final CheckBox checkBox1 = (CheckBox) findViewById(R.id.checkbox1); checkBox1.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { // 処理を記述 } }); final CheckBox checkBox2 = (CheckBox) findViewById(R.id.checkbox2); checkBox2.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View v) { // 処理を記述 } }); } }
setOnClickListener()
メソッドに渡している値は、匿名クラスと呼ばれるJavaの文法を用いています。