在TimePicker中使用键盘输入需要在“确定”之前按“Enter”,否则值将被丢弃

问题描述 投票:0回答:2

我的节目展示经典

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);
}
android android-softkeyboard android-timepicker android-5.1.1-lollipop android-number-picker
2个回答
1
投票

5年后我遇到了这个问题。 经过几个小时的搜索和尝试,似乎调用 timePicker.clearFocus() 将更新 TimePicker 内部使用的 NumberPicker


0
投票

以防万一有人碰到这个(像我一样)

您需要将焦点集中在时间选择器上,并从其对象而不是方法参数中读取,如下所示:

        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
         );
© www.soinside.com 2019 - 2024. All rights reserved.