Soweit mir bekannt ist, Versionen vor Jelly Beans, hatte Set und Tasten Abbrechen, wenn TimePickerDialog verwenden. Jelly Beans hat nur Fertig Knopf.Gibt es eine Möglichkeit, Abbrechen in Android JellyBean TimePickerDialog zu verwenden?
konnte ich nur verlassen die Taste Fertig, und könnte den Dialog schließen, indem außerhalb des Dialogs klicken, aber meine onTimeSetListener
aufgerufen wird, wenn oder außerhalb des Dialogs Fertig drücken.
So fand ich this stackoverflow question, die beschreibt, dass es einen Fehler bei der Verwendung DatePickerDialog gibt. Um das Problem mit DatePickerDialog zu beheben, musste ich beim Initialisieren die onDateSetListener
auf null
setzen und meine eigenen Schaltflächen implementieren, um die BUTTON_POSITIVE
(Set) und BUTTON_NEGATIVE
(Abbrechen) OnClick-Methode zu behandeln. Welches ist in Ordnung, denn wenn die Taste Set genannt Ich mag die Datepicker Werte zugreifen können diese
int yearPicked = dateDlg.getDatePicker().getYear();
int monthPicked = dateDlg.getDatePicker().getMonth();
int dayPicked = dateDlg.getDatePicker().getDayOfMonth();
So gibt es keine Notwendigkeit onDateSetListener
zu verwenden, aber wenn ich würde, würde es wieder aufgerufen werden, wenn Sie die Taste Setzen oder Abbrechen.
Ich versuchte TimePickerDialog die gleiche Art und Weise, aber das Problem ist, dass innerhalb BUTTON_POSITIVE
onClick-Methode zu verwenden, ich nicht die Stunde und Minuten Werte wie vor zugreifen können, weil TimePickerDialog nicht Timepicker als DatePickerDialog bieten hat bietet DatePicker. Und wenn ich wieder onTimeSetListener
verwenden würde, würde es durch Drücken von irgendetwas aufgerufen werden.
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();
Nun, Sie können immer noch eine 'TimePickerDialog.OnTimeSetListener' registrieren, um die eingegebenen Werte zu erfassen, aber tun Sie nichts damit, wenn die negative Schaltfläche angetippt wird, oder? –
Das ist das Problem, OnTimeSetListener wird aufgerufen, wenn Positiv, Negativ und Zurück-Taste gedrückt wird. – Marko
Ich hatte das gleiche Problem, beachten Sie, dass die unten akzeptierte Antwort nicht abwärtskompatibel ist (pre jb). Sice Ich brauchte SDK 8+, löste es mit einem Boolean innerhalb eines erweiterten Fragmentdialogs und überwand onClick() dort. – auval