2015-02-11 15 views
17

Ich ziele für die Erstellung und Erstellung mit API-Ebene 21, mit AppCompat v21.Ich kann ein zukünftiges Datum wählen, wenn ich das maximale Datum in datepicker setze

Es gibt mir ein schön wie neu aussieht Picker Datum, das die unerwartete Eigenschaft von mir erlaubt hat einen späteren Zeitpunkt zu wählen, wenn max date gesetzt wurde

datePicker.setMaxDate(Calendar.getInstance().getTimeInMillis()) 

Die zukünftigen Termine mit ausgegraut sind, aber ich kann Wähle immer noch einen von ihnen. Ist das ein Fehler? Mache ich es falsch? Gibt es eine Möglichkeit zu verhindern, dass der Benutzer in der Datumsauswahl ein zukünftiges Datum auswählen kann?

Die alte Holo-Datumsauswahl erlaubte es nicht, ein zukünftiges Datum auszuwählen, wenn ein maximales Datum festgelegt wurde.

UPDATE:

Während es ist nicht richtig auf meinem Nexus 4 läuft Lager 5.0 arbeiten, wird es richtig auf meinem Nexus 6 ausgeführt stock Android 5.1.1 arbeiten. Vielleicht war es ein Fehler in Android 5.0 und es wurde in 5.1 behoben? Kann jemand bestätigen?

Antwort

21

Also meine eigenen beantworten Frage:

Ich habe die Android-Quelle von DatePickerCalendarDelegate.java bei Grepcode, speziell unter public void setMaxDate(long maxDate) für beide Android-Versionen 5.0 und 5.1 angeschaut.

Was in 5.1 in setMaxDate() Neu ist, dass

mDayPickerView.goTo(getSelectedDay(), false, true, true);

geändert wurde:

mDayPickerView.setMaxDate(maxDate);

Es scheint sie es dort fixiert, die mit meiner Beobachtung entspricht, dass es funktioniert wie erwartet in 5.1 aber nicht in 5.0.

Und so scheint es, dass wir damit beschäftigt sind, mit der Tatsache umzugehen, dass es in Android 5.0 nicht richtig funktioniert (Tage nach dem maximalen Datum sind ausgegraut, können aber immer noch gewählt werden).

+0

also was machen wir? –

+0

Was ich getan habe, war einfach das ausgewählte Datum zu ignorieren, wenn der Benutzer ein Datum in der Zukunft wählte und eine Fehlermeldung (Snackbar oder Toast) zeigte. Eine andere Lösung könnte auch sein, einen anderen Datepicker zu verwenden, vielleicht https://github.com/wdullaer/MaterialDateTimePicker –

+0

In onDateSet() können wir eine Überprüfung wie diese setzen Kalender calendar = Calendar.getInstance(); calendar.set (Jahr, Monat des Jahres, Tag des Monats); Kalender calendar1 = Calendar.getInstance(); if (calendar.getTime(). After (calendar1.getTime())) { Toast.makeToast (getApplicationContext, "Bitte wählen Sie ein gültiges Datum, Toast.LENGTH_LONG) .show(); return; } – ashutiwari4

-1

Sie können eine Methode verwenden, mit der Sie den Wert des vom Benutzer eingegebenen Datums übergeben und beispielsweise mit dem aktuellen Datum vergleichen können. Wenn es ein zukünftiges Datum ist, können Sie den Wert des Datums auf einen bestimmten zurücksetzen (zum Beispiel das aktuelle Datum) und zeigen einen Toast, um ihn zu informieren.

+1

Danke, ich weiß, dass ich das kann, aber ich musste es vorher nicht tun (mit dem alten Datumsauswahl), und ich finde es komisch, dass ich das jetzt tun müsste. Ich würde gerne wissen, ob ich den Datumswähler dazu bringen kann, zukünftige Daten nicht zu wählen (und wenn nicht, würde ich gerne wissen, ob das Android-Team dies absichtlich getan hat oder ob es ein Fehler ist) –

2

Ich bin mit diesem und sein Arbeits richtig

Rufen Sie diese Funktion Datumsauswahl

public void openDatePicker() { 
     DatePickerDialog dpd = new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay); 
     dpd.getDatePicker().setMaxDate(System.currentTimeMillis()); 
     dpd.show(); 
    } 

Hier zu öffnen, ist die mDateSetListener

private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { 
     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
      mYear = year; 
      mMonth = monthOfYear; 
      mDay = dayOfMonth; 
      date.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year); // Here date is a TextView to display date 
      date.setVisibility(View.VISIBLE); 
     } 
    }; 
+0

Danke für die Freigabe ! Ich habe meine Frage aktualisiert. –

Verwandte Themen