まず、イベント処理メカニズムのリスニングに基づいて、
- 機構モデルを扱う時間を聞くことに基づきます。
次のようにイベントソースによってプロセスフローにおけるイベント検出機構は、イベントは、イベントリスナーは、カテゴリオブジェクト。
ステップ1:ユーザの操作を監視するために、イベントソース(アセンブリ)のリスナーを設定します
ステップ2:ユーザのアクションは、リスナーのイベントソースをトリガー
ステップ3:対応するイベント・オブジェクトを生成します
ステップ4:イベントリスナーにパラメータとしてイベント・ソース・オブジェクト
ステップ5:イベントのイベントリスナーオブジェクトを決定、対応するイベントハンドラ(イベントに対応する処理方法)を実行します
- 使用のファイブ異なる形
匿名内部クラスの1)直接使用
通常、最も一般的に使用される:直接setXxxListenerた後、この方法は、内部に書き換えることができ、通常は一時的な使用、再利用性は高くありません!
2)内部クラス
そして、匿名内部クラス以上の異なるああ!利点を使用します。クラスで多重化することができ、インタフェースコンポーネントは外部クラスのすべてに直接アクセスすることができます!
3)外部のクラスを使用して
また、以下でこの形式のイベントを処理するJavaファイルを作成します!外部クラスが直接ユーザ・インターフェース・クラスのコンポーネントにアクセスすることはできませんので、コンストラクタを通じて入ってくるアセンブリを使用します。この結果は十分に簡単なコードです!
イベントリスナ活性として4)直接使用
XxxListener Activityクラスが活動中などに対応するイベントハンドラメソッドをオーバーライド定義するイベントリスナインタフェースを実装してみましょう:Actitityを使用すると、イベントリスナーオブジェクトを追加するときに、インターフェイスがのonClick(ビュー)メソッドを書き直しOnClickListener達成することは、直接、特定の形式でありますsetXxx.Listener(この)へ
5)ラベルに直接結合します
直接アクティビティは、イベントハンドラメソッド、例えば定義得るために、XMLレイアウトファイルに対応する:イベント・ソース(アセンブリ)に対応する公開ボイドmyClick(表示ソース)ソースを、次いで、トリガー事象であると形成に対応するレイアウト・ファイルは、プロパティを提供し:onclickの= " myclick「へ
第二に、コールバックベースのイベント処理メカニズム
私たちは、Javaファイルのクリックイベントにイベントリスナーをバインドする必要がない場合、イベントを対応する構成要素を処理するコールバックを完了することができ、そのイベントは、イベントソース(コンポーネント)自体によって処理されます!
- コールバックメソッド
1)機能的に連結設計ソリューションを分離する手段として定義と機能;
2)Javaのコールバックでは、独自のオペレーティング環境を有していなければならないシステム・アーキテクチャ、およびインターフェースの実装をユーザに提供する必要性などのインターフェースを介して達成されます。
あなたが別の達成するための統一されたインタフェースを実現することができるように3)実装では、クライアントに依存します。
実装からインタフェースの分離を達成するように、4)システムは、異なる状態で私たちの実装クラスを「コールバック」!
- 二つの使用シナリオ
1)カスタムビュー(アセンブリ)
ユーザーがGUIコンポーネントにイベントを刺激すると、コンポーネントは、独自の特定のメソッドがイベントを処理するための責任を負うことになります持っています。
一般的な使用法:基本的なGUIコンポーネントを継承し、イベント処理メソッドは、コンポーネントのカスタムビューを書き換えます。
共通ビューのコールバックメソッド。
画面コンポーネントの①トリガ・イベント:ブールonTouchEvent(MotionEventイベント)。
②ボタンをアセンブリ上に押下された場合:ブールにonKeyDown(INTキーコード、イベントのKeyEvent)。
③ときコンポーネントのリリースボタン:ブールonKeyUpを(INTキーコード、イベントのKeyEvent)。
④長押しボタンアセンブリ:ブールonKeyLongPress(int型のkeyCode、KeyEventのイベント)。
⑤キーボードショートカットイベント::ブールonKeyShortcut(int型のkeyCode、KeyEventのイベント)。
⑥コンポーネントのトラックボール画面トリガイベント:ブールonTrackballEvent(MotionEventイベント)。
⑦フォーカスは、コンポーネントを変更し、異なる6の前に、このメソッドはビューああにのみ書き換えることができる場合は!保護された無効onFocusChanged(ブールgainFocus、int型の方向、以前のRect FocusedRect)
注意:カスタムXMLビューレイアウトで使用、「の完全修飾クラス名」を使用する必要性
2)コールバックベースのイベントの広がりを
コールバック・メソッドの戻り値はブール型で視聴、戻り値は、この方法は完全にイベントを処理されたかどうかを識別するために使用されます。falseの場合、それは処理されません広がって、その後、原料成分に関連するコールバックメソッドの活動が配置されていることを示し、それが広がらない事実です。
イベントの拡散系列:リスナー--->コールバックメソッドビューコンポーネント--->アクティビティコールバックメソッド
三、ハンドラのメッセージパッシングメカニズム
使用のハンドラ:
- ハンドラは、メインスレッドで書きました
システムはルーパーオブジェクトを開始しましたので、私たちは直接Handlerオブジェクトを作成したので、メインスレッドでは、それは情報を送信して処理することができます。
- 子スレッドで書かれたハンドラ
ハンドラは子スレッドで書いたなら、私たちは、ルーパーのオブジェクトを作成する必要があります。次のように作成したプロセス:
1)ダイレクトコールLooper.prepare()メソッドは、現在のスレッドのためのルーパーオブジェクトを作成し、その構造は、メッセージキューに一致作成します
2)他のスレッドからの情報を処理することができるのhandleMessage()メソッドを上書きし、ハンドラオブジェクトを作成
3)ルーパーを開始するLooper.loop()メソッドを呼び出します