【问题标题】:Android: How to get the time from a TimePicker when it is typed inAndroid:输入时如何从 TimePicker 获取时间
【发布时间】:2025-12-11 16:35:01
【问题描述】:

我有一个 DialogPreference,它实现了一个简单的 TimePicker.OnTimeChangedListener(见下文)。通过单击 +/- 按钮设置时间​​效果很好。但是当用户直接在文本字段中输入时间时,我不知道如何保存时间选择器的状态。访问当前的文本字段值可能就足够了,所以我可以将它保存在 onDialogClosed 中。但是 timePicker.getCurrentHour() 不会这样做。请帮忙...

public class TimePreference extends DialogPreference implements
        TimePicker.OnTimeChangedListener {
// ...
@Override
public void onTimeChanged(TimePicker view, int hours, int minutes) {
    selectedHours = hours;
    selectedMinutes = minutes;
}

@Override
public void onDialogClosed(boolean positiveResult) {
    if(positiveResult) {
        String timeString = selectedHours + ":" + selectedMinutes;
        if(isPersistent()) {
            persistString(timeString);
        }
    }
}
// ...
}

【问题讨论】:

  • 问题是直到 TimePicker 中的文本失去焦点时才会调用 onTimeChanged。有谁知道如何直接访问 TimePicker 输入文本?
  • 你可以在这里查看我的答案*.com/questions/7527138/…

标签: android dialog android-preferences sharedpreferences timepicker


【解决方案1】:

到目前为止只有一个非常糟糕的解决方法......

ViewGroup v = (ViewGroup) timePicker.getChildAt(0);
ViewGroup numberPicker1 = (ViewGroup) v.getChildAt(0);
ViewGroup numberPicker2 = (ViewGroup) v.getChildAt(1);
String hours = ((EditText) numberPicker1.getChildAt(1)).getText().toString();
String mins = ((EditText) numberPicker2.getChildAt(1)).getText().toString();

selectedTime = hours+":"+mins;

【讨论】:

    【解决方案2】:

    直到我偶然发现了这个问题,我才注意到这个问题。 有一个简单的解决方案: 当用户在我的应用程序中更改日期和时间后,我只需调用 finish() 并在 onPause() 或 onStop() 或 onDestroy() 中执行以下操作:

    // force the timepicker to loose focus and the typed value is available !
    timePicker.clearFocus();
    // re-read the values, in my case i put them in a Time object.
    time.hour   = timePicker.getCurrentHour();
    time.minute = timePicker.getCurrentMinute();
    

    在此之后,我将 time.toMillis(false) 值存储在表的相应列中。

    我不知道时间选择器是否仍然可以在您的 onDialogClosed(boolean positiveResult) 中访问。如果没有,请找到另一个回调以在它仍然存在时使用。

    希望这会有所帮助。

    【讨论】:

    • 谢谢...清晰的焦点有效! :-) 这一切都可以在 onDialogClosed 中完成。太好了!
    • 这个答案,真的救了我的命。
    • 你能解释一下调用finish()的部分吗?我不明白你怎么称呼完成,你在哪里做?
    • 例如在对话框中按下 Ok 时。在对话框的 OnClick() 中,您可以 timePicker.clearFocus();和完成();然后在 onDialogClose 或 onPause 或 onStop 或 onDestroy 中,您可以从 Timepicker 获取值。