2012-05-08 29 views
9

Tengo una actividad que está apareciendo en un android.app.DatePickerDialog.¿Cómo se obtiene un DatePicker de un DatePickerDialog?

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

quiero conseguir en el DatePicker Vista desde el DatePickerDialog para que pueda establecer los valores mínimo y máximo fechas. La referencia API dice que hay un método getDatePicker y que ha estado allí desde la API 1 pero no es válido, a mi ide no le gusta.

DatePicker picker = dialog.getDatePicker(); 

"El método getDatePicker() no está definida para el tipo DatePickerDialog"

Cualquiera sabe lo API fue el método creado en o cómo puedo llegar al DatePicker para editar min/max fechas?

Estoy usando API 7, Plataforma 2.1.

Respuesta

23

A pesar de que el método getter sólo estar disponible en nido de abeja y por encima (como DMON señaló correctamente), todavía puede llegar a ser bastante fácil acceso al objeto DatePicker encapsulado por el DatePickerDialog utilizando la reflexión. Se verá algo como esto:

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

partir de este momento, usted tiene una referencia al objeto interno DatePicker y usted debería ser capaz de cambiar a su gusto. Tenga cuidado con los errores tipográficos obvios, ya que ingresé esto directamente en el navegador.

+3

Buena respuesta. Lamentablemente, el get y set max on date picker también son API 11 ... – stacybro

+0

Bummer, todavía no los había visto. Desafortunadamente, al navegar por la fuente de 'DatePicker' para 2.1-update1, la lógica de fecha mínima/máxima está completamente ausente. Supongo que podría crear su propia extensión de 'DatePicker' para tratar con eso, e inyectarlo en' DatePickerDialog' (o usar un diálogo personalizado), pero parece mucho trabajo para algo bastante menor. –

3

Se interpretan mal, sólo está disponible desde el API 11:

"público DatePicker getDatePicker() desde: Nivel API 11". Mire closely.

+0

Ah crud. ¡Gracias! – stacybro

Cuestiones relacionadas