View.OnClickListenerとは?
状態:-
閲覧数:1,994
投稿日:2013-04-22
更新日:2014-03-08
ボタンのクリックイベントに対応するリスナー
・ビューのクリック処理に利用される
・クリック時に呼び出される「onClick」メソッドのみ定義されている
・引数にはクリックが発生したViewクラスのオブジェクトが渡されてくる
使い方
・「OnClickListenerインターフェイスを実装したクラス」を、クリックイベントのリスナー(オブジェクト)として登録すれば、ボタンがクリックされた際、onClickメソッドが呼び出される
※ボタンのクリックイベントを検知するためには、ボタンオブジェクトへリスナーを登録する
・ビューのクリック処理に利用される
・クリック時に呼び出される「onClick」メソッドのみ定義されている
・引数にはクリックが発生したViewクラスのオブジェクトが渡されてくる
使い方
・「OnClickListenerインターフェイスを実装したクラス」を、クリックイベントのリスナー(オブジェクト)として登録すれば、ボタンがクリックされた際、onClickメソッドが呼び出される
※ボタンのクリックイベントを検知するためには、ボタンオブジェクトへリスナーを登録する
クラス構成
親クラス
子クラス
CharacterPickerDialog, KeyboardView, QuickContactBadge
コード例
例1
ボタンのイベント処理1
・自分自身に対してandroid.view.View.OnClickListenerインターフェースをインプリメントして、クラス内で「onClick」メソッドを定義
処理の流れ
1.必要パッケージをインポート
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
2.「OnClickListenerインターフェイスを実装したクラス」を作成
public class HelloAndroid2Activity extends Activity implements OnClickListener {
・implementsしないと、クリックイベントがButttonに渡されない
・理由は、クリックリスナーへ登録する際(=setOnClickListenerメソッドを実行する際)、引数で渡せるのはView.OnClickListener「として扱えるインスタンス」のみだから
3.ボタンオブジェクトの取得
Button bt = (Button)findViewById(R.id.button1);
4.クリックリスナーの登録
ボタンオブジェクトへ対して、「OnClickListenerインターフェイスを実装したクラス(HelloAndroid2Activity)」を登録
bt.setOnClickListener(this);
・引数で、インターフェースを実装したクラスのオブジェクトを指定。「OnClickListener」インターフェースを実装している場合には「this」で指定
5.抽象メソッド実行
ボタンをクリックすると、まず最初に、「View.OnClickListenerインターフェイス」のonClick抽象メソッドが呼ばれる
6.実装メソッド実行
次いで、実装したメソッドが呼ばれる
public void onClick(View view) {
▼ /HelloAndroid2/src/android/style/HelloAndroid2Activity.java
package android.style;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class HelloAndroid2Activity extends Activity implements OnClickListener {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// ボタンオブジェクトの取得
Button bt = (Button)findViewById(R.id.button1);
// クリックリスナーの登録
bt.setOnClickListener(this);
}
// ボタンクリック時に呼ばれるメソッド
public void onClick(View view) {
TextView tview = (TextView)findViewById(R.id.textView1);
tview.setText("ボタンが押されました");
}
}
・xml … レイアウト
▼/HelloAndroid2/res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_str1" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
例2
ボタンのイベント処理
・無名クラス利用
▼/HelloAndroid3/src/android/style/HelloAndroid3Activity.java
package android.style;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class HelloAndroid3Activity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// ボタンオブジェクトの取得
Button bt = (Button) findViewById(R.id.button1);
// クリックリスナーの登録
bt.setOnClickListener(new OnClickListener() {
public void onClick(View view) {
TextView tview = (TextView)findViewById(R.id.textView1);
tview.setText("ボタンが押されました");
}
});
}
}
・xml … レイアウト
▼/HelloAndroid3/res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_str1" />
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Text"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>