So verhindern Sie das ausgehende Datum in DatePickerDialog (setMinDate funktioniert nicht wie erwartet)

Ich fand DatePicker (Dialog) sehr verwirrend … Wenn setMinDate () gesetzt ist … der dargestellte Kalender wirklich "visuell deaktivieren" übergebene Termine (grau machen), aber diese Termine sind immer noch verfügbar zu wählen! Ich möchte Benutzer verhindern, dies zu tun. Idealer Weg wäre, dass die Termine nicht klickbar / unselektierbar sind. Wenn es nicht möglich ist, als dieses Ereignis zumindest zu fangen (welches? OnDateChanged ?, onSelected? …) und Toast eine Nachricht und deaktiviere OK-Taste, bis Benutzer ein gültiges Datum auswählt.

Leider hat datepicker (dialog) keinen onChangedListener (eigentlich hat es aber keinen setter dafür). Also das einzige Event, das ich bekomme, ist auf OK gedrückt. Es ist zu spät.

  • So erstellen Sie eine Benachrichtigung mit einer benutzerdefinierten Ansicht, aber mit einem nativen Look & Feel?
  • Wie ändere ich die Bildschirmausrichtung im Android-Emulator?
  • Umgang mit Display-Rotation in Android
  • Android: Übergeben von Daten aus Kind Fragment zu Eltern-Fragment
  • Leere Ansicht anzeigen, wenn ListView leer ist
  • Wie Umgang mit Retrofit und RxJava / RxAndroid in Aktivität zu behandeln?
  • Hier ist mein Code

    dateTextView = (TextView) view.findViewById(R.id.createOrder_date); dateTextView.setText(R.string.createOrder_time_now); dateTextView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { final Calendar calendarNow = Calendar.getInstance(); final int yearNow = calendarNow.get(Calendar.YEAR); final int monthNow = calendarNow.get(Calendar.MONTH); final int dayNow = calendarNow.get(Calendar.DAY_OF_MONTH); DatePickerDialog datePickerDialog = new DatePickerDialog(CreateOrderFragment.this.getActivity(), new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Calendar calendar = Calendar.getInstance(); calendar.set(year, monthOfYear, dayOfMonth); if (calendar.before(calendarNow)) { Toast.makeText(CreateOrderFragment.this.getActivity(), getResources().getString(R.string.createOrder_datePicker_selectFutureDate), Toast.LENGTH_SHORT).show(); view.updateDate(yearNow, monthNow, dayNow); calendar = calendarNow; } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); dateTextView.setText(sdf.format(calendar.getTime())); } }, yearNow, monthNow, dayNow); datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); datePickerDialog.setTitle(getResources().getString(R.string.createOrder_datePicker_title)); datePickerDialog.show(); } }); 

    Bildbeschreibung hier eingeben

  • Warnung beim Abbrechen des ActionBar-Überlauf-Menüs auf Android 4.1.x
  • Wie man eine innere Klasse platzierbar macht
  • Reload Preferences in PreferenceActivity auf Lebenslauf
  • Android Emulator Error "Emulator: ERROR: Das User Data Image wird von einem anderen Emulator verwendet. Abbrechen "
  • Hat die Web View auf Android SSL unterstützt?
  • Default-Aktivität definieren (wenn App startet) programmgesteuert
  • 2 Solutions collect form web for “So verhindern Sie das ausgehende Datum in DatePickerDialog (setMinDate funktioniert nicht wie erwartet)”

    Wenn Sie das Datum in onDateSent () erhalten, überprüfen Sie einfach, ob es früher als das Datum ist, das Sie in setMinDate () festgelegt haben. Wenn ja, dann einfach den DatePickerDialog erneut anzeigen.

    Code:

     final long tomorrow = System.currentTimeMillis() + DateUtils.MILLIS_IN_DAY; private void showDatePickerDialog() { mDatePickerDialog = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { Calendar calendar = Calendar.getInstance(); calendar.set(year, monthOfYear, dayOfMonth); //kv If user tries to select date in past (or today) if (calendar.getTimeInMillis() < tomorrow) { //kv Make them try again showDatePickerDialog(); Toast.makeText(this, "Invalid date, please try again", Toast.LENGTH_LONG).show(); } else { //success } } }, calendarTwoWeeksInFuture.get(Calendar.YEAR), calendarTwoWeeksInFuture.get(Calendar.MONTH), calendarTwoWeeksInFuture.get(Calendar.DAY_OF_MONTH)); //kv Set minimum date as tomorrow mDatePickerDialog.getDatePicker().setMinDate(tomorrow); mDatePickerDialog.show(); } 

    Ich habe nach einer Weile gesucht und es gibt keine Möglichkeit, das in neuem datePickerDialog (5+) zu tun, kannst du es selbst behandeln, indem du den Min / Max-Wert aus dem Klick oder dem Wiedereröffnen des Dialogs, dem Entwickler, weiterentwickeltest jetzt.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.