我发现 DatePicker(Dialog) 非常令人困惑...当 setMinDate() 设置...显示的日历确实“视觉上禁用”传递的日期(使它们变灰)但这些日期仍然可以选择!我想阻止用户这样做。理想的方法是使传递的日期不可点击/不可选择。如果不可能,那么至少要捕获此事件(哪个?onDateChanged?,onSelected?...)并发送消息并禁用“确定”按钮,直到用户选择有效日期。
不幸的是, datepicker(dialog) 没有 onChangedListener (实际上它有但没有设置器)。所以我得到的唯一事件是按下 OK 按钮。为时已晚。
这是我的代码
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();
}
});