Как я могу сделать снимок, когда время изменяется в TimePicker, если используется клавиатура? - PullRequest
2 голосов
/ 01 августа 2010

У меня есть виджет, который является TimePicker, который извлекает время, сохраненное в поле в базе данных.

Дело в том, что когда пользователь изменяет значение времени в виджете, оно не сохраняется в базе данных.

Итак, я наткнулся на метод setOnTimeChangedListener , который работает как шарм, если вы используете только знаки плюс и минус в виджете. Он не фиксирует изменение, если вы используете ключевое слово.

Вот мой код:

pickedTime.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {

        public void onTimeChanged(TimePicker arg0, int arg1, int arg2) {
            System.out.println("What time is it? "
                    + String.valueOf(arg0.getCurrentHour()) + ":"
                    + String.valueOf(arg0.getCurrentMinute()));
        }

    });

Я тоже безуспешно пытался:

pickTime.setOnFocusChangeListener и pickTime.setOnKeyListener методы.

Ответы [ 3 ]

5 голосов
/ 11 июня 2012

Это не сработало для меня при работе с диалогом и использовании TimePicker.

Я где-то читал, что это связано с фокусом, поэтому, если вы сделаете clearFocus прямо перед закрытием диалога, он будет работать.

Что-то вроде:

@Override
protected void onDialogClosed(boolean positiveResult) {
    super.onDialogClosed(positiveResult);

    if (positiveResult) {
        picker.clearFocus();
        lastHour=picker.getCurrentHour();            
        lastMinute=picker.getCurrentMinute();

        String time=String.valueOf(lastHour)+":"+String.valueOf(lastMinute);

        if (callChangeListener(time)) {
            persistString(time);
        }
    }
}
2 голосов
/ 30 ноября 2011

Как выяснил mon3t, можно установить android: AddStatesFromChildren = "true" в файле XML, как:

<DatePicker
    android:id="@+id/datePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:addStatesFromChildren="true" />
<TimePicker
    android:id="@+id/timePicker"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:addStatesFromChildren="true" />

Или вы можете установить это по коду:

    datePicker.setAddStatesFromChildren(true);
    timePicker.setAddStatesFromChildren(true);

Я действительно не могу понять, какой смысл значения по умолчанию, так оно и есть.

1 голос
/ 08 ноября 2013

Ответ Sikora на самом деле добавляет много значения к этой общей проблеме.

Если вы не управляете событием изменения и ищите значение вашего таймера из другого фрагмента кода (обработчик onClick)например, для стандартной кнопки), тогда необходимо получить четкую фокусировку, чтобы получить реальное значение средства выбора времени, когда пользователь вручную вводит часы или минуты с клавиатуры, а не стрелки вверх или вниз или скроллер в зависимости от того,на сотовую или более позднюю версию.

Спасибо Sikora.

...