9

में टाइप किया गया है, मुझे एक डायलॉग प्रेफर मिला है जो एक साधारण टाइमपिकर लागू करता है। ऑनटाइम चेंज लिस्टर (नीचे देखें)। +/- बटन क्लिक करके समय निर्धारित करना बहुत अच्छा काम करता है। लेकिन मुझे नहीं पता कि टाइमपिकर की स्थिति को कैसे सहेजना है जब उपयोगकर्ता ने सीधे टेक्स्टफील्ड में टाइप किया था। यह वर्तमान टेक्स्टफील्ड मान तक पहुंचने के लिए पर्याप्त हो सकता है, इसलिए मैं इसेDialogClosed पर जारी रखने में सक्षम हूं। लेकिन 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); 
     } 
    } 
} 
// ... 
} 
+0

समस्या यह है कि टाइममिकर में पाठ फोकस खोने तक टाइम्स चेंजड को तब तक नहीं बुलाया जाता है जब तक कि टाइमपिकर में टेक्स्ट फोकस न हो जाए। क्या किसी को टाइमपिकर इनपुट टेक्स्ट को सीधे एक्सेस करने का तरीका पता है? – cody

+0

आप यहाँ मेरा उत्तर की जांच कर सकते http://stackoverflow.com/questions/7527138/timepicker-how-to-get-am-or-pm/23931797#23931797 – Mukesh

उत्तर

46

मैं इस समस्या पर ध्यान नहीं दिया था जब तक मैं इस सवाल पर ठोकर खाई। वहाँ एक सरल उपाय है:

// 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(); 
: जब उपयोगकर्ता मेरे एप्लिकेशन में दिनांक और समय बदल रहा है किया जाता है, मैं बस खत्म() और onPause में() या onStop() या OnDestroy() मैं यह कर फोन

इसके बाद मैं अपना स्टोर के उचित कॉलम में समय .toillis (false) मान संग्रहीत करता हूं।

मुझे नहीं पता कि टाइमपिकर अभी भी आपके ऑनअलॉगक्लोज्ड (बूलियन पॉजिटिव रिसेट) में पहुंच योग्य है या नहीं। यदि नहीं, तो यह तब भी उपयोग करने के लिए एक और कॉलबैक ढूंढें जब यह अभी भी हो।

उम्मीद है कि इससे मदद मिलती है।

+0

धन्यवाद ... स्पष्ट फोकस काम करता है! :-) यह सब DialogClosed पर किया जा सकता है। महान! – cody

+0

यह उत्तर, वास्तव में मेरे जीवन को बचाया। – eitama

+0

क्या आप कॉलिंग फिनिश() के हिस्से को समझा सकते हैं? मुझे समझ में नहीं आया कि आप कैसे खत्म करते हैं और आप इसे कहां करते हैं? उदाहरण के लिए –

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; 
संबंधित मुद्दे