Androidの基本リスナー仕様



現在作成中のアプリで使っているものTips。基本自分用です。

# View.OnClickListener
# View.OnLongClickListener
# View.OnKeyListener
# View.OnTouchListener
おそらく最も頻繁に利用するインターフェース。(あくまで自分が。)
Viewクラスのリスナーは参考資料がすぐに見つかるのでAPI詳細は省略。

## OnLongClickやOnKeyの戻り値について
boolean型の戻り値があるメソッドは一般的に「消費した場合true」に設定することになっている。
「消費された」時は他のメソッドが呼ばれないような設計になっているっぽい。

## 長押しの判定について
LongClickとかLongKeyPressの時間は、多分ViewConfigurationのgetLongPressTimeoutの値(ミリ秒)が使用されている模様。（デフォルト500）
他には、getKeyRepeatTimeout, getTapTimeoutあたりは使う機会があるかも…？

```java:長押し判定時間の取得方法
// staticメソッドなのでシステム一意かな。
int timeOut = ViewConfiguration.getLongPressTimeout();

// コンテキスト別にも設定されている項目があるみたいだけど、当分使わないだろう。
Context cxt;
ViewConfiguration conf = ViewConfiguration.get(cxt);
int doubleTapSlop = conf.getScaledDoubleTapSlop();
```

# ViewGroup.OnHierarchyChangeListener
要素が変更された時にコールされるインターフェース。
## 仕様
### void onChildViewAdded(View view1, View view2)
view1 ... イベント発生元View
view2 ... 追加されたView

***
### void onChildViewRemoved(View view1, View view2)
view1 ... イベント発生元View
view2 ... 削除されたView

```java:設定方法
ViewGroup grp;
grp.setOnHierarchyChangeListener(lintener);
```

# AdapterView.OnItemClickListener
# AdapterView.OnItemLongClickListener
# AdapterView.OnItemSelectedListener
要素がクリックまたは選択／選択解除された時にコールされるインターフェース。
## 仕様
### void onItemClick(AdapterView<?> paramAdapterView, View paramView, int paramInt, long paramLong);
paramAdapterView... イベント発生元View(親のView)
paramView... イベント発生元View（子要素のView）
paramInt... 列数（?）*未調査
paramLong... 行数（?）*未調査

***
### boolean onItemLongClick(AdapterView<?> paramAdapterView, View paramView, int paramInt, long paramLong);
paramAdapterView... イベント発生元View(親のView)
paramView... イベント発生元View（子要素のView）
paramInt... 列数（?）*未調査
paramLong... 行数（?）*未調査
戻り値... onClickを連動させる場合true(falseの方が一般的?らしい)

***
### void onItemSelected(AdapterView<?> paramAdapterView, View paramView, int paramInt, long paramLong);
paramAdapterView... イベント発生元View(親のView)
paramView... イベント発生元View（子要素のView）
paramInt... 列数（?）*未調査
paramLong... 行数（?）*未調査

***
### void onNothingSelected(AdapterView<?> paramAdapterView);
paramAdapterView... イベント発生元View(親のView)

```java:設定方法
AdapterView<? extends Adapter> adpView;
adpView.setOnItemClickListener(lintener);
adpView.setOnItemLongClickListener(lintener);
adpView.setOnItemClickListener(lintener);
```

# ViewStub.OnInflateListener
スタブがインフレート（≒可視化）された時にコールされるインターフェース。

## 仕様
### void onInflate(ViewStub paramViewStub, View paramView);
paramViewStub... インフレート前のView（スタブ）
paramView... インフレート後のView 

```java:設定方法
ViewStub vStb;
adpView.setOnItemClickListener(lintener);
```

## インフレートについて
インフレート(inflate)とは、直訳すると「膨らませる」ことらしい。「インフレ」の意もあるらしい。
androidでは、以下のような使い方をする。

> ViewStubウィジェット（faviconViewStub | Android Developers）を使用すると、必要になった時にレイアウトファイルをインクルードする事ができる。
> 詳しくは、「  faviconc. レイアウトトリック: ViewStub の使用 - ソフトウェア技術ドキュメントを勝手に翻訳 」を参照。
> たまにしか使われる事のないウィジェットに対して、表示が必要になるまでレイアウトの使用をおさえ、レイアウトを効率的に配置する事ができる。

[レイアウト（8）-Viewの階層構造をあやつる - 愚鈍人](http://ichitcltk.hustle.ne.jp/gudon/modules/pico_rd/index.php?content_id=111)

===
 
以降は基本リスナーではないが、使う機会があったので追記。

# SeekBar.OnSeekBarChangeListener
シークバーがドラッグ（単純にクリック・タップ等でも発生するはず）された時にコールされるインターフェース。

## 仕様
### void onProgressChanged (SeekBar seekBar, int progress, boolean fromUser);
seekBar... ドラッグ中のSeekBar
progress... 変更された進捗率。(デフォルトだと百分率になるが、ProgressBar.setMax(int)により変更可能。
fromUser... ユーザ契機の変更であればtrueが設定されるはず。例えばアプリの中でsetProgressとかするとfalseになるのだろうか。（未調査）

***
### void onStartTrackingTouch (SeekBar seekBar);
seekBar... ドラッグ開始したSeekBar

***
### void onStartTrackingTouch (SeekBar seekBar);
seekBar... ドラッグ停止したSeekBar

```java:設定方法
SeekBar seekBar;
seekBar.setOnSeekBarChangeListener(lintener);
```