Ich fand DatePicker (Dialog) sehr verwirrend ... Wenn setMinDate() eingestellt ist ... der angezeigte Kalender wirklich "visual disable" vergangene Daten (mache sie grau), aber diese Daten sind immer noch wählbar! Ich möchte Benutzer davon abhalten, dies zu tun. Idealerweise wäre es möglich, vergangene Daten nicht anklickbar/nicht auswählbar zu machen. Wenn es nicht möglich ist, zumindest dieses Ereignis (welches? OnDateChanged ?, onSelected? ...) abzufangen und eine Nachricht zu rösten und die OK-Schaltfläche zu deaktivieren, bis der Benutzer ein gültiges Datum auswählt.So verhindern Sie, dass das übergebene Datum in DatePickerDialog (setMinDate funktioniert nicht wie erwartet)
Bedauerlicherweise hat datepicker (dialog) keinen onChangedListener (eigentlich hat es aber keinen Setter dafür). Das einzige Ereignis, das ich erhalte, ist die OK-Taste. 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();
}
});
'Simple sdf = new Simple ("TT/MM/JJJJ");' \t \t 'Datum minDate = null;' \t \t '' try { \t \t \t 'minDate = sdf.parse (" 01/01/2014"); '' \t \t} catch (ParseException e) { ' \t \t \t' e.printStackTrace(); ' \t \t \t' zurückzukehren; '' \t \t} ' ::: Ich habe es damit gemacht. ** HINWEIS: ** Es ist für API Level 9 und höher –
Haben Sie jemals eine Lösung gefunden? – jlindenbaum
leider nicht. – Wooff