O ile mi wiadomo, wersje przed Jelly Beans, miał Ustaw i Anuluj przycisków podczas korzystania TimePickerDialog. Jelly Beans ma tylko przycisk Zrobione.Czy istnieje sposób na anulowanie w Android JellyBean TimePickerDialog?
mogę tylko zostawić Sporządzono przycisk, a może zamknąć okno klikając na zewnątrz okna, ale mój onTimeSetListener
jest wywoływana jeśli naciśnięcie Sporządzono lub na zewnątrz okna.
Tak więc znalazłem this stackoverflow question, który opisuje, że jest błąd podczas korzystania z DatePickerDialog. Aby naprawić problem przy użyciu DatePickerDialog, podczas inicjowania musiałem ustawić onDateSetListener
na null
i zaimplementować własne przyciski, aby obsłużyć metodę onClick: BUTTON_POSITIVE
(Set) i (Cancel). Co jest w porządku, bo gdy przycisk Ustaw nazywa mogę uzyskać dostęp do datepicker wartości tak
int yearPicked = dateDlg.getDatePicker().getYear();
int monthPicked = dateDlg.getDatePicker().getMonth();
int dayPicked = dateDlg.getDatePicker().getDayOfMonth();
Więc nie ma potrzeby korzystania onDateSetListener
, ale jeśli będzie, to będzie znowu nazwać po naciśnięciu Ustaw lub anuluj.
Próbowałem użyć TimePickerDialog w ten sam sposób, ale problemem jest to, że wewnątrz BUTTON_POSITIVE
metody onClick, nie może uzyskać dostępu do godziny i minuty wartości jak poprzednio, ponieważ TimePickerDialog nie przewiduje timepicker jak DatePickerDialog zapewnia DatePicker. I znowu, gdybym użył onTimeSetListener
, zostałby wywołany przez naciśnięcie czegokolwiek.
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();
Cóż, nadal można zarejestrować 'TimePickerDialog.OnTimeSetListener' w celu przechwytywania wprowadzonych wartości, ale po prostu nie robić nic z nimi, jeśli przycisk jest naciśnięty, prawda? –
To jest problem, wywoływany OnTimeSetListener po naciśnięciu przycisku dodatniego, ujemnego i wstecznego. – Marko
Miałem ten sam problem, zauważ, że zaakceptowana odpowiedź poniżej nie jest zgodna z poprzednimi wersjami (pre jb). Sice potrzebowałem sdk 8+, rozwiązałem go za pomocą wartości boolowskiej wewnątrz rozszerzonego okna dialogowego fragmentu i nadpisałem tutaj metodę onClick(). – auval