2012-01-31 89 views
4

我已經實施了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當用戶點擊設置按鈕時關閉?

回答

5

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