2012-05-08 51 views
9

我有一個活動是彈出一個android.app.DatePickerDialog。如何從DatePickerDialog獲取DatePicker?

DatePickerDialog dialog = new DatePickerDialog(this, startDateSetListener, start_cal.get(Calendar.YEAR), start_cal.get(Calendar.MONTH), start_cal.get(Calendar.DATE)); 

我想在的DatePicker查看從DatePickerDialog得到這樣我就可以設置最小和最大的日期。 API參考指出,有一個方法getDatePicker,並且自API 1以來一直存在,但它無效,我的ide不喜歡它。

DatePicker picker = dialog.getDatePicker(); 

「的方法getDatePicker()是未定義的類型DatePickerDialog」

任何一個知道什麼是API中的方法創建或我怎樣才能到的DatePicker編輯最小/最大日期?

我正在使用API​​ 7 Platform 2.1。

回答

23

儘管getter方法只有在蜂窩以上是可用的(如DMON正確地指出的),你仍然可以很容易獲得訪問由DatePickerDialog使用反射封裝的DatePicker對象。它會是這個樣子:

DatePickerDialog dialog = ... // create dialog 
Field mDatePickerField = dialog.getClass().getDeclaredField("mDatePicker"); 
mDatePickerField.setAccessible(true); 
DatePicker mDatePickerInstance = (DatePicker) mDatePickerField.get(dialog); 

從上,您必須將內部DatePicker對象的引用了這一點,你應該能夠將其變爲自己的喜好。請注意任何明顯的拼寫錯誤,因爲我直接將其輸入到瀏覽器中。

+3

很好的答案。不幸的是,獲取和設置最大日期選擇器也是API 11 ... – stacybro

+0

Bummer,我還沒有看過那些。不幸的是,在瀏覽DatePicker的源代碼2.1-update1時,最小/最大日期邏輯完全不存在。我想你可以創建自己的'DatePicker'的擴展來處理它,並將它注入'DatePickerDialog'(或者使用自定義對話框),但對於一些非常小的東西來說,它看起來像是一個可怕的工作。 –

3

你看錯,這只是因爲API可用11:

「公衆的DatePicker getDatePicker()自:API級別11」。看看closely

+0

Ah crud。謝謝! – stacybro