我正在使用datepicker片段显示一个日期选择器。我用我之前选择的日期初始化我的日期选择器。
在使用上一个日期加载datepicker时,我无法从datepicker中选择当前日期。我只在API Level 21中遇到此问题。它适用于所有API级别,需要API 21.
每当我从datepicker中删除maxDate()时,它就开始运作了。但在我的情况下,我需要禁用未来的日期。
我不明白我的代码有什么问题。
这是我的代码。
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
public DatePickerFragment() {
}
private String selectedDate = "";
private Interfaces.OnDateSelectedClickListener onDateSelectedClickListener;
public DatePickerFragment(Interfaces.OnDateSelectedClickListener onDateSelectedClickListener, String selectedDate) {
this.onDateSelectedClickListener = onDateSelectedClickListener;
this.selectedDate = selectedDate;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Calendar calendar = Calendar.getInstance();
int year = 0, month = 0, day = 0;
if (StaticUtils.isTextEmpty(selectedDate)) {
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
} else {
try {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yyyy", Locale.getDefault());
Date date = simpleDateFormat.parse(selectedDate);
calendar.setTimeInMillis(date.getTime());
year = calendar.get(Calendar.YEAR);
month = calendar.get(Calendar.MONTH);
day = calendar.get(Calendar.DAY_OF_MONTH);
} catch (ParseException e) {
e.printStackTrace();
}
}
DatePickerDialog datePicker;
if (Build.VERSION.SDK_INT < 21) {
datePicker = new DatePickerDialog(getActivity(), AlertDialog.THEME_HOLO_LIGHT, this, year, month, day);
} else {
datePicker = new DatePickerDialog(getActivity(), R.style.datepicker, this, year, month, day);
}
datePicker.getDatePicker().setMaxDate(System.currentTimeMillis()); // disable future dates
datePicker.setTitle("");
datePicker.setCustomTitle(null);
return datePicker;
}
public void onDateSet(DatePicker view, int year, int month, int day) {
if (onDateSelectedClickListener != null) {
onDateSelectedClickListener.onDateSelect(StaticUtils.getDateTimeFromCalendar(day, month, year));
}
}
}
更新:
应用@Lalchand代码后,如果我已将日历加载到上一个日期,则可以选择当前日期,但仍然在API级别21中,它无效。谁能帮我?或者给我一些改进我的代码的建议。
答案 0 :(得分:3)
经过几次研究后,我才知道系统将不允许我选择当前日期,因为我设置了最长日期。因此,要允许我的用户选择我更改的当前日期
datePicker.getDatePicker().setMaxDate(System.currentTimeMillis());
到
datePicker.getDatePicker().setMaxDate(System.currentTimeMillis() + (1000 * 60 * 60));
通过应用上述工作,我可以选择当前日期,并将日历加载到上一个日期。
答案 1 :(得分:0)
我认为以下链接会为您提供答案:
Able to choose date even after setMaxDate
因此,在用户选择日期后,如果用户选择了错误的日期,请向用户发出警告或提示信息。
找到解决方案:按照此链接中的提及使用库
答案 2 :(得分:-1)
datePicker.getDatePicker().setMaxDate((maxDate + 1).getTime() - 1)
我想他们写的代码如下:
if (getCurrentTimeInMillis() > getMaxDate().getTimeInMillis()) {
// you can't select the future time
return;
}
修正错误后,应该如下所示:
if (getCurrentDate() > getMaxDate()) {
// you can't select the future time
return;
}
很明显,您可以通过将其设置为当天的最大timeInmillis来解决此问题