- ベストアンサー
Android/OnClickListenerについての疑問
- Androidアプリでのユーザーインターフェースの処理において、View.OnClickListenerインターフェイスを実装する必要性がわかりません。
- ViewクラスのonClickメソッドを呼び出すためには、Viewクラスを継承すればよいのではないかと思いますが、なぜView.OnClickListenerインターフェイスを実装する必要があるのでしょうか?
- また、ViewクラスsetOnClickListenerメソッドの引数のView.OnClickListener lの意味を教えてください。lは何を指していますか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
>「View.OnClickListenerインターフェイス」をimplementsする必要性が理解できません。 implementsしないと、クリックイベントがButttonに渡されないからです。 >最終的に、ViewクラスonClickメソッドを呼び出すのであれば、 >Viewクラスを継承すれば良いと思うのですが、 Viewに、onClickなどというイベント用メソッドはありません。 このonClickがあるのは、まさしくimplementsしたView.OnClickListenerの中です。 つまり、View.OnClickListenerをimplementsしたからこそ、クリックしたときにonClickが呼び出されるようになったのです。implementsしていなかったら、クリックしても何も起こりません。「クリックした」というイベントが素通りしてしまうので。 コンポーネント類は、基本的に初期状態では「何のイベントも認識しない」のです。このコンポーネントに、イベントリスナーを追加すると、そのイベントをコンポーネントが受け取れるようになります。 >この引数(View.OnClickListener l)の意味を教えてください。 おっしゃるように、引数に渡せるのはView.OnClickListener「として扱えるインスタンス」のみ、ということです。 thisは、implements OnClickListenerしていますから、OnClickListenerインスタンスとして振る舞うことができます。
その他の回答 (1)
- LOHA
- ベストアンサー率52% (203/388)
>インターフェイスについて教えてください。 いわゆるポリモーフィズムという概念ですね。 ポリモーフィズム、継承、インターフェースとかのキーワードでググれば解説がわんさか出てくると思います。 >最終的に、ViewクラスonClickメソッドを呼び出すのであれば、 >Viewクラスを継承すれば良いと思うのですが、 命名が若干紛らわしいですが、ViewクラスにonClickというメソッドは定義されていないと思います。 なので、継承してonClickメソッドを定義しても、新しくonClickを定義しただけでしかなく、何も起きません。 >どうして、「View.OnClickListenerインターフェイス」をimplementsするのでしょうか? implementsしてリスナーを登録するというのはGUIではよく使われる定石です。 >l って何ですか? Listenerの頭文字の"l"じゃないですかね。まぁタダの変数名です。 #最初1と空目した…。
お礼
回答ありがとうございました >いわゆるポリモーフィズムという概念ですね。 >ポリモーフィズム、継承、インターフェースとかのキーワードでググれば解説がわんさか出てくると思います アドバイスありがとうございます。キーワードが分かったので調べやすかったです >ViewクラスにonClickというメソッドは定義されていないと思います 勘違いしていました… >implementsしてリスナーを登録するというのはGUIではよく使われる定石です 定石なんですね。情報ありがとうございます。知りませんでした… >Listenerの頭文字の"l"じゃないですかね。まぁタダの変数名です 改めてリファレンス見たら、例えば、「View v」とか書いてある箇所とかも、何か特別な意味があるのかと思っていたのですが、単純に頭文字取っているだけなんですね。参考になりましたー
お礼
回答ありがとうございました >Viewに、onClickなどというイベント用メソッドはありません。 >このonClickがあるのは、まさしくimplementsしたView.OnClickListenerの中です 勘違いしていました >引数に渡せるのはView.OnClickListener「として扱えるインスタンス」のみ、ということです >thisは、implements OnClickListenerしていますから、OnClickListenerインスタンスとして振る舞うことができます 説明分かりやすかったです