いままで気づかなかった
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();
...
}
}
});
と美しくかける。