9

Ho un DialogPreference che implementa un semplice TimePicker.OnTimeChangedListener (vedi sotto). Impostare l'ora facendo clic sui pulsanti +/- funziona alla grande. Ma non so come salvare lo stato di Timepicker quando l'utente ha digitato l'ora direttamente nel campo di testo. Potrebbe essere sufficiente accedere al valore corrente del campo di testo, quindi sarei in grado di mantenerlo su onDialogClosed. Ma timePicker.getCurrentHour() non lo farà. Si prega di aiuto ...Android: Come ottenere il tempo da un TimePicker quando viene digitato in

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

Il problema è che onTimeChanged non viene chiamato fino a quando il testo in TimePicker non viene messo a fuoco. Qualcuno sa come accedere direttamente al testo di input di TimePicker? – cody

+0

È possibile controllare la mia risposta qui http://stackoverflow.com/questions/7527138/timepicker-how-to-get-am-or-pm/23931797#23931797 – Mukesh

risposta

46

non avevo notato questo problema fino a quando sono incappato in questo problema. C'è una soluzione semplice: Quando l'utente è fatto cambiare la data e l'ora nella mia app, ho semplicemente chiamo finitura() e nel onPause() o onStop() o OnDestroy() faccio questo:

// 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(); 

Dopo questo, memorizzo il valore time.toMillis (falso) nella colonna appropriata della tabella.

Non so se il Timepicker è ancora accessibile nel tuo onDialogClosed (boolean positiveResult). In caso contrario, trova un altro callback da usare quando è ancora.

Spero che questo aiuti.

+0

Grazie ... chiare lavori di messa a fuoco! :-) Tutto può essere fatto su onDialogClosed. Grande! – cody

+0

Questa risposta mi ha davvero salvato la vita. – eitama

+0

Puoi spiegare la parte del finale di chiamata()? Non ho capito come si chiama finish e dove lo si fa? –

1

Solo una pessima soluzione finora ...

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; 
Problemi correlati