2010-01-12 81 views
45

DatePicker.OnDateChangedListener이라는 Android의 이벤트 리스너가 있습니다.Android - OnDateChangedListener - 어떻게 설정하나요?

DatePicker dp = new DatePicker(getContext()); 
dp.setOnDateChangedListener(this); 
//where this is my activity extends DatePicker.OnDateChangedListener 

을하지만 추측 : 나는 다음과 같이 DatePicker에서보기의 날짜 변경 리스너를 설정하려고 ? 날짜 선택 도구에 setOnDateChangedListener이라는 메서드가 없습니다.

내 질문은 :

  1. 그렇다면 당신이 날짜가 안드로이드에 수신기를 변경 설정합니까?
  2. 날짜가 변경된 수신기를 설정할 수없는 경우이 이벤트의 용도는 무엇입니까?

모든 문서/자습서가 매우 유용합니다.

답변

92

DatePicker을 만들었 으면 처음 표시 할 날짜로 초기화해야합니다. 그것이 청취자를 추가 할 수있는 지점입니다.

DatePicker.init(int, int, int, OnDateChangedListener)을 참조하십시오.

+87

Android API는 실제로 뭔가 있습니다. 나는 어리석은 접근 방식을 생각해 냈다. – Tawani

+1

나에게 어리석은 것처럼 보이지 않으며 적어도 API 문서에있다. 어쨌든, 안드로이드 위젯은 보통 몇 가지 생성자를 가지고 있기 때문에 그 이유는 상상이됩니다. 왜냐하면 여러분은 어떤 스타일과 레이아웃 속성을 만들어야 할지를 결정할 때 - 많은 매개 변수를 가진 수많은 생성자를 만드는 대신 그 규칙을 지켰습니다. –

+4

클릭 리스너를 설정하는 것과 같은 setOnDateChangedListener() 메소드가있는 것이 적절합니다. 오늘 자동 초기화되는 날짜로 초기화하는 이유가 궁금합니다. –

11

이 뷰는 실제로 네 개의 뷰의 조합입니다, 그들은 다음과 같습니다

세 스피너

하나는 OnDateChangeListener, 당신은 init 메소드에 전달 된 개체로 CalendarView

것 단순히 포함 된 CalendarView에 전달되어야합니다. 그리고 저는 여러분이 좋은 이전 CalendarView에 setOnDateChangeListener 메서드가 있다는 것을 알고 있다고 믿습니다 ...... ......

DatePicker 클래스에는 메서드가 있습니다 전화 한 getCalendarView, 그리고 당신이 포함 된 CalendarView에 손을 넣고 싶다면 당신이 호출 할 수있는 메소드이다. 당신이 포함 된 CalendarView에 손을 일단

, 다음, 불필요하게 당신의 setOnDateChangeListener이 같은

+3

이것은 끔찍한 API에 대한 훌륭한 해결 방법입니다. 이걸 주셔서 감사합니다 - 방금 제 베이컨을 구 했어요! – sleeke

+0

datePicker.getCalendarView(). setOnDateChangeListener() 완전히 작동합니다! 감사! 매우 직관적이지는 않습니다. API가 datePicker.setOnDateChangeListner() 였어 야한다고 생각합니다. – ONE

7

뭔가 호출 할 수 있습니다, 대답 :

DatePicker myDatePicker = (DatePicker) findViewById(R.id.my_date_picker); 
myDatePicker.getCalendarView().setOnDateChangeListener(new CalendarView.OnDateChangeListener() { 
    @Override 
    public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) { 
     Log.d("tag", "finally found the listener, the date is: year " + year + ", month " + month + ", dayOfMonth " + dayOfMonth); 
    } 
}); 
+0

UnsupportedOperationException가 발생합니다. DatePicker에 CalendarView가 없습니다. –

+1

android : datePickerMode = "spinner"가있는 DatePicker를 팽창시키고 그 리스너가 저를 위해 일했습니다. 논리적 인 설명없이 ... – user2331454

30

가장 좋은 방법입니다

 DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker); 
     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), new DatePicker.OnDateChangedListener() { 

       @Override 
       public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) { 
        Log.d("Date", "Year=" + year + " Month=" + (month + 1) + " day=" + dayOfMonth); 

       } 
      }); 
+2

좋은 예입니다. 감사. –