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; 
相關問題