2012-01-31 4 views
4

here 예제를 사용하여 DatePickerDialog을 구현했습니다.사용시 닫을 때 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 ? 
     } 
    } 
}; 

내가 가진 문제는 사용자가 설정 버튼을 클릭 automaticlly 찾을 때 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(); 
    }