私の知る限り、Jelly Beans より前のバージョンでは、 TimePickerDialogSetを使用するときにとCancelボタンがありました。ジェリービーンズはボタンのみ。Done
ボタンをそのままにしてDone、ダイアログの外側をクリックしてダイアログを閉じることもできますが、ダイアログの外側onTimeSetListener
を押すと呼び出されDoneます。
それで、 DatePickerDialogの使用時にバグがあることを説明するこのスタックオーバーフローの質問を見つけました。DatePickerDialogを使用して問題を解決するには、初期化時に を に設定し、(Set) および(Cancel) onClick メソッドを処理する独自のボタンを実装する必要がありました。ボタンが呼び出されると、次のようにDatePicker値 にアクセスできるため、これは問題ありませんonDateSetListener
null
BUTTON_POSITIVE
BUTTON_NEGATIVE
Set
int yearPicked = dateDlg.getDatePicker().getYear();
int monthPicked = dateDlg.getDatePicker().getMonth();
int dayPicked = dateDlg.getDatePicker().getDayOfMonth();
したがって、 を使用する必要はありませんが、使用するonDateSetListener
場合は、Set または Cancel を押したときに再度呼び出されます。
TimePickerDialogを同じ方法で使用しようとしましたが、問題は、BUTTON_POSITIVE
onClick メソッド内で、以前のように時間と分の値にアクセスできないことです。これは、 TimePickerDialogがTimePickerを提供しないため、 DatePickerDialogがDatePickerを提供するためです。また、 を使用すると、何かを押すと呼び出されます。onTimeSetListener
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
int min = cal.get(Calendar.MINUTE);
final TimePickerDialog timeDlg = new TimePickerDialog(PreferencesActivity.this, null, hour, min, true);
// Make the Set button
timeDlg.setButton(DialogInterface.BUTTON_POSITIVE, "Set", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
// CANNOT ACCES THE VALUES
Toast.makeText(PreferencesActivity.this, "Set", Toast.LENGTH_SHORT).show();
}
}
});
// Set the Cancel button
timeDlg.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_NEGATIVE) {
Toast.makeText(PreferencesActivity.this, "Cancel", Toast.LENGTH_SHORT).show();
}
}
});
timeDlg.show();