21
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Androidの基本リスナー仕様

Last updated at Posted at 2014-03-03

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

View.OnClickListener

View.OnLongClickListener

View.OnKeyListener

View.OnTouchListener

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

OnLongClickやOnKeyの戻り値について

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

長押しの判定について

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

長押し判定時間の取得方法
// 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

設定方法
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)

設定方法
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

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

インフレートについて

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

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

レイアウト(8)-Viewの階層構造をあやつる - 愚鈍人

===

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

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

設定方法
SeekBar seekBar;
seekBar.setOnSeekBarChangeListener(lintener);
21
22
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?