gpt4 book ai didi

java - 使用单击“设置”按钮时阻止 DatePickerDialog 关闭

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:52:37 26 4
gpt4 key购买 nike

我已经使用所示示例实现了一个DatePickerDialog here .

在我的 DatePickerDialog.OnDateSetListener 实现中,我添加了验证逻辑来​​检查所选日期是否在特定范围内。

private final DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {

@Override
public void onDateSet(DatePicker view, int y, int m,
int d) {

final Calendar calendar = Calendar.getInstance();
calendar.set(y, m, d);
Date date = calendar.getTime();

if(!myValidationFunction(date)) {
// date not within allowed range
// cancel closing of dialog ?
}
}
};

我遇到的问题是,当用户单击设置按钮时 DatePickerDialog 会自动关闭,如果验证规则失败,我想保持 DatePickerDialog 打开。

有谁知道如何在用户单击“设置”按钮时阻止 DatePickerDialog 关闭?

最佳答案

从 API 11 开始,DatePicker 可以为您验证日期。

遵循指南 you refer to , 覆盖 onCreateDialog 时,获取 DatePicker 并设置最小和最大日期:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// no changes from guide ...
final DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day);
dialog.getDatePicker().setMinDate(minDate);
dialog.getDatePicker().setMaxDate(minDate);
return dialog;
}

这样用户就不会选择错误的日期,因此无需手动验证日期。

对于旧版本,您可以在允许关闭时使用 boolean 值进行控制,并实现您自己的逻辑。在这里,我尝试说明您需要在何处扩展代码:

    @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day){

@Override
public void onBackPressed() {
allowClose = true;
super.onBackPressed();
}

@Override
public void onClick(DialogInterface dialog, int which) {
if (which==DialogInterface.BUTTON_POSITIVE && validate()){
allowClose = true;
}
super.onClick(dialog, which);
}

@Override
public void dismiss() {
if (allowClose) {
super.dismiss();
}
}

};

return dialog;
}

private void onCancelBtnClick() {
allowClose = true;
dismiss();
}

关于java - 使用单击“设置”按钮时阻止 DatePickerDialog 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9084585/

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