【问题标题】:Stopping the DatePickerDialog from closing when use clicks the Set button使用单击“设置”按钮时停止关闭 DatePickerDialog
【发布时间】:2012-01-31 18:02:17
【问题描述】:

我已经使用here 所示的示例实现了DatePickerDialog

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 关闭?

【问题讨论】:

    标签: java android dialog android-2.2-froyo datepickerdialog


    【解决方案1】:

    从 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;
    }
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-04
      • 2017-02-16
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 1970-01-01
      • 2015-04-25
      • 2013-02-23
      • 1970-01-01
      相关资源
      最近更新 更多