アプリ版:「スタンプのみでお礼する」機能のリリースについて

Android/View.OnClickListenerインターフェイス

インターフェイスについて教えてください。
下記ページで、「View.OnClickListenerインターフェイス」をimplementsする必要性が理解できません。
▽Androidアプリにおけるユーザインタフェースの基本処理(3/4):CodeZine
  http://codezine.jp/article/detail/6026?p=3

最終的に、ViewクラスonClickメソッドを呼び出すのであれば、
Viewクラスを継承すれば良いと思うのですが、
どうして、「View.OnClickListenerインターフェイス」をimplementsするのでしょうか?

ボタンのオブジェクトにリスナーを登録する際、
「リスナーイベントに応じて呼び出されるメソッド」は少ないほうが良い、から?

それとも、ViewクラスsetOnClickListenerメソッドの引数に書いている内容に関係しているのでしょうか?
▽View | Android Developers
http://developer.android.com/reference/android/v …
>public void setOnClickListener (View.OnClickListener l)

この引数(View.OnClickListener l)の意味を教えてください。
View.OnClickListener型しか受け付けない?
l って何ですか?

A 回答 (2件)

>インターフェイスについて教えてください。



いわゆるポリモーフィズムという概念ですね。
ポリモーフィズム、継承、インターフェースとかのキーワードでググれば解説がわんさか出てくると思います。


>最終的に、ViewクラスonClickメソッドを呼び出すのであれば、
>Viewクラスを継承すれば良いと思うのですが、

命名が若干紛らわしいですが、ViewクラスにonClickというメソッドは定義されていないと思います。
なので、継承してonClickメソッドを定義しても、新しくonClickを定義しただけでしかなく、何も起きません。


>どうして、「View.OnClickListenerインターフェイス」をimplementsするのでしょうか?

implementsしてリスナーを登録するというのはGUIではよく使われる定石です。


>l って何ですか?

Listenerの頭文字の"l"じゃないですかね。まぁタダの変数名です。
#最初1と空目した…。
    • good
    • 0
この回答へのお礼

回答ありがとうございました

>いわゆるポリモーフィズムという概念ですね。
>ポリモーフィズム、継承、インターフェースとかのキーワードでググれば解説がわんさか出てくると思います
アドバイスありがとうございます。キーワードが分かったので調べやすかったです

>ViewクラスにonClickというメソッドは定義されていないと思います
勘違いしていました…

>implementsしてリスナーを登録するというのはGUIではよく使われる定石です
定石なんですね。情報ありがとうございます。知りませんでした…

>Listenerの頭文字の"l"じゃないですかね。まぁタダの変数名です
改めてリファレンス見たら、例えば、「View v」とか書いてある箇所とかも、何か特別な意味があるのかと思っていたのですが、単純に頭文字取っているだけなんですね。参考になりましたー

お礼日時:2012/05/18 18:51

>「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インスタンスとして振る舞うことができます。
    • good
    • 0
この回答へのお礼

回答ありがとうございました

>Viewに、onClickなどというイベント用メソッドはありません。
>このonClickがあるのは、まさしくimplementsしたView.OnClickListenerの中です
勘違いしていました

>引数に渡せるのはView.OnClickListener「として扱えるインスタンス」のみ、ということです
>thisは、implements OnClickListenerしていますから、OnClickListenerインスタンスとして振る舞うことができます
説明分かりやすかったです

お礼日時:2012/05/18 18:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!