我正在阅读 Big Nerd Ranch Android 编程书。我正在研究 CrimeIntent 项目,并尝试设置 DatePicker 和 TimePicker 来设置“犯罪”的日期和时间。我的 DatePicker 对话框工作正常,当日期更改时,一切都会正确更新,没有任何问题。
问题出在 TimePicker 上。由于某种原因, onTimeChangedListener 似乎没有触发,因此时间无法正确更新。我已复制代码以将监听器设置为 TimePicker。我有一个日志语句,当我更改时间时它永远不会触发,这就是为什么我认为这就是问题所在。
TimePicker timePicker = (TimePicker) v.findViewById(R.id.dialog_time_picker);
timePicker.setCurrentHour(hour);
timePicker.setCurrentMinute(minute);
timePicker.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
// Get the date
date = new GregorianCalendar(year, month, day, hourOfDay, minute).getTime();
Log.d("TimePickerFragment", "hour: " + hourOfDay + "; minute: " + minute);
// Save this date
getArguments().putSerializable(EXTRA_TIME, date);
}
});
这是我设置小时和分钟的代码:
date = (Date) getArguments().getSerializable(EXTRA_TIME);
// Create a calendar to get hour, minute, and AM/PM info
cal = Calendar.getInstance();
cal.setTime(date);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int amPm = cal.get(Calendar.AM_PM); // 0 = AM 1 = PM
year = cal.get(Calendar.YEAR);
month = cal.get(Calendar.MONTH);
day = cal.get(Calendar.DAY_OF_MONTH);
如果您需要任何其他代码,请告诉我
最佳答案
在 Lollipop(5.0) 之前,每次时间更改时,TimePicker View 都会触发 onTimeChanged 事件,从而允许应用程序 动态地响应选择器当前指定的时间。
在 Lollipop 中,Timepicker 带有
android:timePickerMode="时钟"
在时钟模式下,当时间更改时,不会触发 onTimeChanged 事件。
因此,最佳方法是使用 android:timePickerMode="spinner"
<TimePicker
android:id="@+id/timepick_start"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:timePickerMode="spinner"/>
关于android - onTimeChangedListener 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27749031/