Question

J'ai une DialogPreference qui met en œuvre simple TimePicker.OnTimeChangedListener (voir ci-dessous). Réglage de l'heure en cliquant sur les boutons +/- fonctionne très bien. Mais je ne sais pas comment sauver l'état du timepicker lorsque l'utilisateur a tapé dans le temps directement dans le champ de texte. Il pourrait être suffisant pour accéder à la valeur actuelle textfield, donc je serais capable de persister dans onDialogClosed. Mais timePicker.getCurrentHour () ne le fera pas. S'il vous plaît aider ...

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);
        }
    }
}
// ...
}
Était-ce utile?

La solution

Je ne l'avais pas remarqué ce problème jusqu'à ce que je suis tombé sur cette question. Il y a une solution simple: Lorsque l'utilisateur se fait changer la date et l'heure dans mon application, j'appelle simplement la finition () et dans le OnPause () ou onStop () ou OnDestroy () Je fais ceci:

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

Après cela, je stocke la valeur time.toMillis (de faux) dans la colonne appropriée de ma table.

Je ne sais pas si le timepicker est toujours accessible dans votre onDialogClosed (positiveResult booléenne). Sinon, trouver un autre rappel à utiliser quand il est encore.

Hope this helps.

Autres conseils

Seule une solution de contournement très mal à ce jour ...

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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top