9

Tengo una DialogPreference que implementa un TimePicker.OnTimeChangedListener simple (ver a continuación). Configurar la hora haciendo clic en los botones +/- funciona muy bien. Pero no sé cómo guardar el estado del timepicker cuando el usuario ingresó la hora directamente en el campo de texto. Podría ser suficiente para acceder al valor actual del campo de texto, así que podría persistir en onDialogClosed. Pero timePicker.getCurrentHour() no lo hará. Por favor, ayuda ...Android: Cómo obtener el tiempo de un TimePicker cuando está escrito en

public class TimePreference extends DialogPreference implements 
     TimePicker.OnTimeChangedListener { 
// ... 
@Override 
public void onTimeChanged(TimePicker view, int hours, int minutes) { 
    selectedHours = hours; 
    selectedMinutes = minutes; 
} 

@Override 
public void onDialogClosed(boolean positiveResult) { 
    if(positiveResult) { 
     String timeString = selectedHours + ":" + selectedMinutes; 
     if(isPersistent()) { 
      persistString(timeString); 
     } 
    } 
} 
// ... 
} 
+0

El problema es que onTimeChanged no se llama hasta que el texto en el TimePicker pierde el foco. ¿Alguien sabe cómo acceder al texto de entrada de TimePicker directamente? – cody

+0

Puede comprobar mi respuesta aquí http://stackoverflow.com/questions/7527138/timepicker-how-to-get-am-or-pm/23931797#23931797 – Mukesh

Respuesta

46

que no había notado este problema hasta que me topé con esta pregunta. Hay una solución simple: Cuando el usuario ha terminado de cambiar la fecha y la hora en mi aplicación, simplemente me llamo acabado() y en el onPause() o onStop() o OnDestroy() hago esto:

// force the timepicker to loose focus and the typed value is available ! 
timePicker.clearFocus(); 
// re-read the values, in my case i put them in a Time object. 
time.hour = timePicker.getCurrentHour(); 
time.minute = timePicker.getCurrentMinute(); 

Después de esto, almaceno el valor time.toMillis (falso) en la columna apropiada de mi tabla.

No sé si todavía se puede acceder al selector de tiempo en su onDialogClosed (boolean positiveResult). De lo contrario, busque otra devolución de llamada para usar cuando todavía esté.

Espero que esto ayude.

+0

Gracias ... obras enfoque claro! :-) Todo se puede hacer en onDialogClosed. ¡Estupendo! – cody

+0

Esta respuesta realmente salvó mi vida. – eitama

+0

¿Puedes explicar la parte del final de la llamada()? No entendí cómo llamas terminar y dónde lo haces? –

1

Sólo una muy mala solución hasta el momento ...

ViewGroup v = (ViewGroup) timePicker.getChildAt(0); 
ViewGroup numberPicker1 = (ViewGroup) v.getChildAt(0); 
ViewGroup numberPicker2 = (ViewGroup) v.getChildAt(1); 
String hours = ((EditText) numberPicker1.getChildAt(1)).getText().toString(); 
String mins = ((EditText) numberPicker2.getChildAt(1)).getText().toString(); 

selectedTime = hours+":"+mins; 
Cuestiones relacionadas