Android: как получить время из TimePicker, когда он набирается в - PullRequest
10 голосов
/ 22 октября 2010

У меня есть DialogPreference, который реализует простой TimePicker.OnTimeChangedListener (см. Ниже). Установка времени нажатием кнопок +/- отлично работает. Но я не знаю, как сохранить состояние средства выбора времени, когда пользователь вводит время прямо в текстовое поле. Этого может быть достаточно для доступа к текущему значению текстового поля, поэтому я смогу сохранить его в onDialogClosed. Но timePicker.getCurrentHour () этого не сделает. Пожалуйста, помогите ...

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);
        }
    }
}
// ...
}

Ответы [ 2 ]

47 голосов
/ 09 ноября 2010

Я не заметил этой проблемы, пока не наткнулся на этот вопрос. Есть простое решение: Когда пользователь заканчивает изменение даты и времени в моем приложении, я просто вызываю finish () и в onPause () или onStop () или onDestroy () я делаю это:

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

После этого я сохраняю значение time.toMillis (false) в соответствующем столбце моей таблицы.

Я не знаю, по-прежнему ли указатель времени доступен в вашем onDialogClosed (boolean positiveResult). Если нет, найдите другой обратный вызов для использования, когда он еще.

Надеюсь, это поможет.

1 голос
/ 26 октября 2010

Пока только очень плохой обходной путь ...

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;
...