2010-01-12 58 views
45

Android中有一個事件監聽器,名爲DatePicker.OnDateChangedListener。 我想設置一個datepicker視圖的上更改日期聽衆如下:Android - OnDateChangedListener - 你如何設置?

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

但你猜怎麼着? 日期選擇器不具有稱爲setOnDateChangedListener的方法。

我的問題是:

  1. 你設置如何再日期的Android改變聽衆?
  2. 如果無法設置日期更改偵聽器,此事件的目的是什麼?

任何文檔/教程將會非常有幫助。

回答

92

一旦你創建了DatePicker,你需要首先用你想要顯示的日期來初始化它。這是您可以添加偵聽器的地方。

參見DatePicker.init(int, int, int, OnDateChangedListener)

+87

的Android API真的是一些東西。我不知道是誰提出了這個荒謬的做法 – Tawani 2010-01-28 14:36:07

+1

它似乎對我來說並不荒謬,至少它在API文檔中。無論如何,我想象的原因是因爲Android小部件通常有幾個構造函數,因爲當您希望控制它應該創建的樣式和佈局屬性時 - 所以他們一直遵循該約定,而不是創建具有多個參數的許多構造函數。 – 2010-01-28 17:09:06

+4

似乎有一個setOnDateChangedListener()方法可用於設置點擊偵聽器。我想知道他們爲什麼會在它自動初始化爲今天的時候將它初始化爲一個日期? – 2011-08-02 18:00:46

11

這種觀點實際上是在四個視圖的組合,它們是:

三紗廠

一個CalendarView

隨着OnDateChangeListener,你傳遞給init方法的對象會簡單地傳遞給包含的CalendarView,並且我相信您知道在舊的CalendarView中有一個setOnDateChangeListener方法...... ......

在DatePicker類中,有一個方法叫getCalendarView,並且如果您想要掌握所包含的CalendarView,則可以調用該方法。

一旦你得到你的手所包含CalendarView,然後,毋容置疑,你可以調用它的setOnDateChangeListener

+3

對於糟糕的API,這是一個很好的解決方法。謝謝你 - 你只是救了我的培根! – sleeke 2014-02-06 18:57:11

+0

datePicker.getCalendarView()。setOnDateChangeListener()完全可以工作!謝謝!雖然不是很直觀。仍然認爲API應該是datePicker.setOnDateChangeListner()。 – ONE 2017-07-02 07:56:25

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:DateView對於DatePicker不存在 – 2016-01-22 17:10:47

+1

用android:datePickerMode =「spinner」給DatePicker充氣並且該Listener爲我工作。沒有任何合理的解釋... – user2331454 2016-04-26 10:13:13

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

不錯的例子。謝謝。 – 2017-01-11 14:55:23