Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓:输入时间时,如何从时间选择器获取时间_Android_Dialog_Android Preferences_Sharedpreferences_Timepicker - Fatal编程技术网

Android 安卓:输入时间时,如何从时间选择器获取时间

Android 安卓:输入时间时,如何从时间选择器获取时间,android,dialog,android-preferences,sharedpreferences,timepicker,Android,Dialog,Android Preferences,Sharedpreferences,Timepicker,我有一个DialogPreference,它实现了一个简单的TimePicker.OnTimeChangedListener(见下文)。通过单击+/-按钮设置时间效果很好。但是当用户直接在文本字段中输入时间时,我不知道如何保存时间选择器的状态。访问当前的textfield值就足够了,所以我可以将其保存在onDialogClosed中。但是timePicker.getCurrentHour()无法执行此操作。请帮忙 public class TimePreference extends Dialo

我有一个DialogPreference,它实现了一个简单的TimePicker.OnTimeChangedListener(见下文)。通过单击+/-按钮设置时间效果很好。但是当用户直接在文本字段中输入时间时,我不知道如何保存时间选择器的状态。访问当前的textfield值就足够了,所以我可以将其保存在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);
        }
    }
}
// ...
}

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

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;

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


希望这能有所帮助。

问题是,直到计时器选择器中的文本失去焦点,才会调用onTimeChanged。有人知道如何直接访问计时器输入文本吗?你可以在这里查看我的答案,谢谢。。。清晰的焦点工作!:-)这一切都可以在onDialogClosed中完成。伟大的这个答案真的救了我的命。你能解释一下调用finish()的部分吗?我不明白如何调用finish以及在何处执行?例如,在对话框中按Ok时。在对话框的OnClick()中,可以选择timePicker.clearFocus();并完成();然后在onDialogClose或onPause或onStop或onDestroy中,您可以从时间选择器获取值。