Dialog の onStop 時にも onTimeSet が呼ばれるようです。
Back キーなどでキャンセルした場合でも呼ばれてしまうという厄介な挙動。
参考1: TimePickerDialog and Jelly Bean, onTimeSet fires on cancel
参考2: Android 4.1.2 dialogs are called twice
参考先では onTimeSet が呼ばれた回数をカウントする方法が紹介されていましたが、
この先どういう挙動になるかもわからないので、
AlertDialog の View に TimePicker をセットして
setPositiveButton の callback で TimePicker の値を取得する方法をとることにしました。
TimePickerDialog でバグを回避する方法を頑張るよりもわかりやすい気がしますね。
setNegativeButton の有無によるキャンセルボタンの有無や、タイトルの設定もしやすいです。
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle("My Time Picker Dialog"); final TimePicker tp = new TimePicker(getActivity()); // 初期値を設定したい場合はここで。 // tp.setCurrentHour(0); // tp.setCurrentMinute(0); builder.setView(tp); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { int hour = tp.getCurrentHour(); int minute = tp.getCurrentMinute() // 処理をする… } }); builder.setNegativeButton(android.R.string.cancel, null); builder.create().show();
0 件のコメント:
コメントを投稿