gpt4 book ai didi

android - 如何防止在 DatePickerDialog 中选择通过日期(setMinDate 无法按预期工作)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:32 24 4
gpt4 key购买 nike

我发现 DatePicker(Dialog) 非常困惑......当设置了 setMinDate() 时...显示的日历确实“视觉上禁用”了通过的日期(使它们变成灰色)但是这些日期仍然可以选择!我想阻止用户这样做。理想的方法是使通过的日期不可点击/不可选择。如果不可能,至少要捕获此事件(哪个?onDateChanged?、onSelected?...)并 toast 消息并禁用“确定”按钮,直到用户选择有效日期。

不幸的是,datepicker(dialog) 没有 onChangedListener(实际上它有但没有 setter )。所以我得到的唯一事件是按下 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();

}
});

enter image description here

最佳答案

当您在 onDateSent() 中收到日期时,只需检查它是否早于您在 setMinDate() 中设置的日期。如果是,则再次显示 DatePickerDialog。

代码:

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();
}

关于android - 如何防止在 DatePickerDialog 中选择通过日期(setMinDate 无法按预期工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com