イベントとは?
状態:-
閲覧数:3,926
投稿日:2013-04-20
更新日:2014-03-03
・ユーザー操作などによって生じる「ボタンクリック」など、「外からの働きかけにより発生する出来事」を指す言葉
2種類ある
A.必ず発生するイベント処理
B.発生しない場合もあるイベント処理
A.必ず発生するイベント処理
・発生した際、呼ばれるメソッドが予め定義されている … onCreateなど
B.発生しない場合もあるイベント処理
・発生した際呼ばれるメソッドは、予め定義されていない … ボタンクリックなど
・そのイベントに対応する動作はアプリケーション毎に異なるため、対応するメソッドを予めすべて定義しておくことは出来ない(どう考えても無理。そもそも無駄)
・イベントごとに、呼ばれるメソッドだけを定義したクラス(インターフェイス)を用意しておき、必要に応じてそれを実装する、という方法を採用
※実装 … インターフェイスの場合このように呼称するが、中身はクラス継承と(ほぼ)同じ
イベントの種類
2種類ある
A.必ず発生するイベント処理
B.発生しない場合もあるイベント処理
A.必ず発生するイベント処理
・発生した際、呼ばれるメソッドが予め定義されている … onCreateなど
B.発生しない場合もあるイベント処理
・発生した際呼ばれるメソッドは、予め定義されていない … ボタンクリックなど
・そのイベントに対応する動作はアプリケーション毎に異なるため、対応するメソッドを予めすべて定義しておくことは出来ない(どう考えても無理。そもそも無駄)
↓
・イベントごとに、呼ばれるメソッドだけを定義したクラス(インターフェイス)を用意しておき、必要に応じてそれを実装する、という方法を採用
※実装 … インターフェイスの場合このように呼称するが、中身はクラス継承と(ほぼ)同じ
イベントリスナー
イベントリスナーとは?
イベントが発生した際、「そのイベントに対応して呼ばれるよう用意されたメソッド」を持つインターフェイス、またはその実装クラスのこと
※イベントハンドラも同義
2種類あるため、文脈に応じて下記何れに該当するか読み取る必要がある
1.元々用意してある「イベントに対応するメソッドを持つインターフェイス」
2.その実装クラス
1.インターフェイス
・「イベントに応じて、呼び出すメソッドを予め定義している」インターフェイス
・特定の「 オブジェクト 」からの「 イベント 」の発生を監視し続け、「 イベント 」発生と共に「Data」が伝達されれば、必要な処理を実行する
オンクリック・リスナー(android.view.View.OnClickListener)
・ユーザーが「ボタン」を押す時に「イベントが発生」
ロケーション・リスナー(LocationListener)
・ユーザーの「端末の位置が変化」する度に「イベントが発生」し、その「 イベント情報」と「位置情報」が伝達される事により、地図上に本端末の位置を表示する事が可能となる
イベントリスナが持っているコールバックメソッド例
・onClick()
・onLongClick()
・onFocusChange()
・onKey()
・onTouch()
・onCreateContextMenu()
2.実装クラス
・上記「1」の実装クラス
Activityクラス
・onCreateメソッドなど、特定のイベントが発生したら呼ばれるメソッドが予め定義されている
イベント·リスナーの考え方
・「キーが入力された」「マウスがクリックされた」といった「イベント」が発生する場合、そのイベント対応処理をする必要が生じる
・しかし、その都度全部作り直していくのは非効率的
・そこで、ライブラリ側(Android API)はイベントに対応するメソッドを持つインターフェイスを作成し、そのインターフェイスの実装クラスを渡せるようにしておく
・例えば、Viewに、onClickなどというイベント用メソッドはない
・onClickは、View.OnClickListenerにある
・使うためには、View.OnClickListenerをimplements
・すると、クリックしたときにonClickが呼び出されるようになる
・implementsしていなければ、クリックしても何も起こらない。ただ、「クリックした」というイベントが素通りしてしまうだけ
・つまり、コンポーネント類は、基本的に初期状態では「何のイベントも認識しない」
・このコンポーネントに、イベントリスナーを追加することで、そのイベントをコンポーネントが受け取れるようになる
利用の仕方
1.「インターフェイスをオーバーライドした(メソッドを実装した)クラス」を作成
2.このクラスのインスタンスへの参照を渡す
3.イベントが発生した際、オーバーライドしたメソッドが呼び出される
※ポリモーフィズムを利用することで「イベントの処理をするメソッドのみを作る」ようにしている
実装方法は4種類
→実装方法は4種類
・setOnClickListener()を使用し、View.OnClickListenerインターフェイスを無名内部クラスとして定義することにより実装
1. OnClickListenerのインスタンスを生成する方法
・setOnClickListener()を使用し、View.OnClickListenerインターフェイスを無名内部クラスとして定義することにより実装
2. OnClickListenerを継承する方法
無名クラス … インスタンス生成 | 継承 |
---|---|
package android.style; |
import android.os.Bundle; |
「ボタンクリック」に対応する場合
→実装方法は4種類
例 … ボタンのイベント処理
・方式1/自分自身に対してandroid.view.View.OnClickListenerインターフェースをインプリメントして、クラス内で「onClick」メソッドを定義
・方式2/無名クラス利用
1.Viewクラスで定義されていてる「View.OnClickListenerインターフェイス」の実装クラスを作成
・「View.OnClickListener」インターフェイスはボタンクリックイベントに対応したonClickメソッドを持つため、実装クラスではこのメソッドをオーバーライドする
2.このクラスのインスタンスへの参照を渡す
・このクラス(OnClickListenerインターフェイスを実装したユーザ作成クラス)を、ボタンオブジェクトのsetOnClickListenerメソッドに渡すことで、クリックイベントが発生した際にオーバーライドしたメソッドが呼び出される
実装方法は4種類
例 … ボタンのイベント処理
・方式1/自分自身に対してandroid.view.View.OnClickListenerインターフェースをインプリメントして、クラス内で「onClick」メソッドを定義
・方式2/無名クラス利用
方式1具体例
1.Viewクラスで定義されていてる「View.OnClickListenerインターフェイス」の実装クラスを作成
import android.view.View.OnClickListener;
public class HelloAndroid4 extends Activity implements OnClickListener {
@Override
・「View.OnClickListener」インターフェイスはボタンクリックイベントに対応したonClickメソッドを持つため、実装クラスではこのメソッドをオーバーライドする
// ボタンクリック時に呼ばれるメソッド
public void onClick(View view) {
TextView tview = (TextView)findViewById(R.id.textView1);
tview.setText("ボタンが押されました");
}
2.このクラスのインスタンスへの参照を渡す
・このクラス(OnClickListenerインターフェイスを実装したユーザ作成クラス)を、ボタンオブジェクトのsetOnClickListenerメソッドに渡すことで、クリックイベントが発生した際にオーバーライドしたメソッドが呼び出される
public class HelloAndroid4 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);