2

我有一个小部件,它是一个 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.setOnFocusChangeListenerpickTime.setOnKeyListener方法。

4

3 回答 3

5

在处理对话框和使用 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);
        }
    }
}
于 2012-06-11T02:53:49.657 回答
2

正如 mon3t 发现的那样,该选项是在 XML 文件中设置 android:AddStatesFromChildren="true",如下所示:

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

我真的无法理解默认设置的意义何在。

于 2011-11-30T08:48:02.280 回答
1

Sikora 的回答实际上为这个常见问题增加了很多价值。

如果您不管理更改事件并从另一段代码(例如标准按钮的 onClick 处理程序)中查找时间选择器的值,则需要明确的焦点来获取时间选择器的实际值当用户使用键盘手动输入小时或分钟时,而不是使用向上或向下箭头或滚动条,这取决于它们在蜂窝或更高版本上。

谢谢西科拉。

于 2013-11-08T13:57:03.350 回答