11

我有一个 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);
        }
    }
}
// ...
}
4

2 回答 2

48

直到我偶然发现了这个问题,我才注意到这个问题。有一个简单的解决方案:当用户在我的应用程序中更改日期和时间后,我只需调用 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) 中是否仍然可以访问时间选择器。如果没有,请在它仍然存在时找到另一个要使用的回调。

希望这可以帮助。

于 2010-11-09T13:53:35.903 回答
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;
于 2010-10-26T17:30:47.897 回答