我有一个小部件,它是一个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()));
}
});
我也尝试过失败:
pickedTime.setOnFocusChangeListener 和 pickedTime.setOnKeyListener 方法。
答案 0 :(得分: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);
}
}
}
答案 1 :(得分: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);
我真的无法理解默认的重点是什么。
答案 2 :(得分:1)
Sikora的答案实际上为这个常见问题增添了很多价值。
如果您没有管理更改事件并从不同的代码(例如标准按钮的onClick处理程序)中查找时间选择器的值,那么需要明确关注以获得实际值用户使用键盘手动输入小时或分钟时的时间选择器,而不是使用向上或向下箭头或滚动条,具体取决于它们是蜂窝状还是更高版本。
谢谢Sikora。