停止使用时关闭DatePickerDialog时单击设置按钮

问题描述:

我已经实施了DatePickerDialog使用示例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当用户点击设置按钮时关闭?

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