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.

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

  • Wie deaktiviere man bestimmte Daten im Android Date Picker Dialog?
  • DatePickerDialog wird mit zwei Rändern angezeigt
  • DatePicker.setMinDate (long minDate) wirft IllegalArgumentException: Zeit nicht zwischen
  • Set Limit auf dem DatePickerDialog in Android?
  • Wie bekommst du einen DatePicker von einem DatePickerDialog?
  • So verwenden Sie DatePickerDialog in BaseAdapter
  • DatePickerDialog Anzeige Jahr Picker zuerst
  • Verwenden von Kit Kat DatePicker in Lolipop Device
  • 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.