Es gibt ein Problem mit DatePickerDialog und TimePickerDialog. Ein Benutzer kann mit den Plus- oder Minus-Tasten ein Datum und eine Uhrzeit auswählen. Das funktioniert. Aber wenn der Benutzer in das Feld klickt, kann er einen Wert von Tastatur gesetzt:Android: DatePickerDialog und TimePickerDialog übergeben keine Auswahl
Aber dies nicht bei allen. Wenn der Benutzer einen neuen Wert eingibt und auf die Schaltfläche "OK" klickt, wird der Wert des aktuell ausgewählten Felds nicht an die Methode onDateSet
übergeben. Dies funktioniert weder in DatePickerDialog
noch in TimePickerDialog
. Stattdessen muss der Benutzer auf die grüne Schaltfläche auf der Tastatur klicken, um den Wert in DatePickerDialog
wirklich festzulegen. Wenn er "OK" drückt, dann wird der Wert übergeben, aber das ist eine ziemlich idiotische Usability. Niemand würde das tun. Dies ist, wie ich die Fragmente implementieren:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener
{
private final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day)
{
final Calendar calendar = Calendar.getInstance(Locale.getDefault());
calendar.set(year, month, day);
String pickedDate = dateFormat.format(calendar.getTime());
((MenuEditActivity)getActivity()).setMenuDate(pickedDate);
}
@Override
public void onCancel(DialogInterface dialog)
{
super.onCancel(dialog);
}
}
Hat jemand das gleiche Problem haben und bereits einige schnelle Abhilfe implementieren? (Ich möchte die ganzen Picker-Dialoge nicht einfach neu implementieren, nur von dieser halbfertigen Implementierung).
Nun, ich beobachte nicht das Verhalten, das du beschreibst, aber wenn du den Fokussiertrick mit dem 'TimePickerDialog' ausprobieren willst, solltest du den' TimePicker' mit einer ähnlichen Methode wie in [ diese Antwort] (http://stackoverflow.com/a/39071972). Sie würden 'findViewById()' auf Ihrem 'TimePickerDialog' aufrufen, stattdessen' 'timePicker'' anstelle von '" ampm_layout "', und die zurückgegebene 'View' sollte der' TimePicker' sein. (Sie würden natürlich die Sichtbarkeitsdaten weglassen.) Sie müssen dies möglicherweise in der Methode 'onStart()' von 'Fragment' tun, um sicherzustellen, dass alles korrekt initialisiert wurde. –
@MikeM. Danke, es funktioniert jetzt (siehe meine aktualisierte Frage). Wenn du es als Antwort postest, kann ich es akzeptieren. Übrigens, es ist komisch. Ich habe gestern schon etwas ähnliches versucht, aber ich bin immer null geworden. Vielleicht war es das, weil ich es nicht in 'onStart()' gemacht habe. – Bevor
Kein Problem. Ja, ich hatte eine Chance, früher einen Schnelltest zu machen, und es spielte nicht gut in 'onCreateDialog()'. Ich habe den Grund nicht wirklich untersucht, aber es hat in 'onStart()' recht gut funktioniert. Anyhoo, deine ausgearbeiteten Lösungen sind viel besser als mein kleiner Vorschlag. Sie sollten diese Änderungen stattdessen auf eine Antwort übertragen. Trotzdem danke. Schätzen Sie das Angebot. Prost! –