9

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

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); 
     } 
    } 
} 
// ... 
} 
+0

问题是onTimeChanged直到TimePicker中的文本失去焦点才被调用。有谁知道如何直接访问TimePicker输入文本? – cody 2010-10-26 14:53:52

+0

你可以在这里查看我的回答 http://stackoverflow.com/questions/7527138/timepicker-how-to-get-am-or-pm/23931797#23931797 – Mukesh 2014-05-29 11:07:35

回答

46

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

希望这会有所帮助。

+0

谢谢...明确的重点工程! :-)它可以在onDialogClosed中完成。大! – cody 2010-11-09 19:01:01

+0

这个答案,真正挽救了我的生命。 – eitama 2011-10-09 01:14:45

+0

你可以解释一下调用finish()的部分吗? 我不明白你怎么称呼完成,你在哪里做?例如,当在对话框中按下“确定”时,可以使用例如 – 2012-12-29 09:42:55

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; 
相关问题