我的节目展示经典
android.app.TimePickerDialog
并聆听OnTimeSetListener.onTimeSet()
。从 Android 4.3 迁移到 5.1 后,我注意到使用键盘输入分钟并按“确定”会导致将错误的值传递给 onTimeSet()
处理程序。但是,如果我在按对话框中的“确定”按钮之前按键盘上的 Enter(或单击小时输入或仅使用微调器),则值是正确的。
我认为这与
NumberPicker
当用户按下“确定”时焦点未清除有关。
使用旋转器几分钟或另外按键盘上的Enter很不方便。如何仅通过“确定”按钮接受我的值?
import android.app.*;
...
private final DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
...
}
}
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case TIMEPICKER_DIALOG:
return new TimePickerDialog(ChannelActivity.this, mTimeSetListener, day.get(Calendar.HOUR_OF_DAY), day.get(Calendar.MINUTE), true);
}
return super.onCreateDialog(id);
}
5年后我遇到了这个问题。 经过几个小时的搜索和尝试,似乎调用 timePicker.clearFocus() 将更新 TimePicker 内部使用的 NumberPicker
以防万一有人碰到这个(像我一样)
您需要将焦点集中在时间选择器上,并从其对象而不是方法参数中读取,如下所示:
TimePickerDialog timePickerDialog = new TimePickerDialog(
this,
android.R.style.Theme_Holo_Light_Dialog,
(timePicker, hr, min) -> {
timePicker.clearFocus(); // this is must
textViewHr.setText(String.valueOf(timePicker.getHour())); //read from the view
textViewMin.setText(String.valueOf(timePicker.getMinute())); //read from the view
},
hour, //initial hour value
minute, //initial minute value
true //is 24 hours format
);