マル開発日記

マルAndroidデベロッパ

いままで気づかなかった

 Android開発ネタです。Dialogについてです。

 Dialogのボタンリスナに DialogInterface.OnClickListener ってのがあるんですが、イベント発生時にリスナに渡されるのは

 onClick(DialogInterface dialog, int which)


 なので、DialogInterfaceとやらが渡されます。DialogはDialogInterfaceを継承しているので、これをDialogにキャストすれば Dialog のオブジェクトとして触ることができます。
 例えばDialogにセットしたView(例えばEditText等)をonClickイベント時に使いたいと思って、DialogのAPIでgetViewなるものはないかな~ってずっと探してたんですけど、なかった。そんなメソッド。自分はゲッタはgetXXXと思い込んでいたもので。getWindowからViewを辿ってできそうな気もしてたけどちょっと面倒くさいし、なのでコード的にベストプラクティスでない方法(例えばfinalを利用するとか)でViewにアタッチしてたんです。

 で、今日なんとなくDialog APIのページを眺めていたら、あるじゃないか、findViewById とやらが。API 1の時からアルじゃないか。。

 結論は、、思い込みは良くない!でした。(こんな話して面白がる人いるのかな?)

new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case DialogInterface.BUTTON_POSITIVE:
EditText text = ((Dialog) dialog).findViewById(R.id.edit);
String name = text.getText().toString();
...
}
}
});

 と美しくかける。