6

में एक मिनट अंतराल कैसे सेट कर सकता हूं, मैं एंड्रॉइड DialogFragment (Google द्वारा सुझाए गए) में 10 मिनट का अंतराल सेट करने का प्रयास कर रहा हूं, लेकिन मुझे वास्तव में ऐसा करने का कोई तरीका नहीं मिल रहा है।मैं डायलॉगफ्रैगमेंट

यहाँ टुकड़ा वर्ग जो संवाद से पता चलता है:

public class TimePickerFragment extends DialogFragment 
     implements TimePickerDialog.OnTimeSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current time as the default values for the picker 
     final Calendar c = Calendar.getInstance(); 
     int hour = c.get(Calendar.HOUR_OF_DAY); 
     int minute = c.get(Calendar.MINUTE); 

     // Create a new instance of TimePickerDialog and return it 
     return new TimePickerDialog(getActivity(), this, hour, minute, 
       DateFormat.is24HourFormat(getActivity())); 
    } 

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 

     String realMinute= ""; 

     switch (minute) { 
      case 1: 
       realMinute = "01"; 
       break; 
      case 2: 
       realMinute = "02"; 
       break; 
      case 3: 
       realMinute = "03"; 
       break; 
      case 4: 
       realMinute = "04"; 
       break; 
      case 5: 
       realMinute = "05"; 
       break; 
      case 6: 
       realMinute = "06"; 
       break; 
      case 7: 
       realMinute = "07"; 
       break; 
      case 8: 
       realMinute = "08"; 
       break; 
      case 9: 
       realMinute = "09"; 
       break; 
      default: 
       realMinute = String.valueOf(minute); 
       break; 
     } 

     final String selectedDate = String.valueOf(hourOfDay) + ":" + realMinute; 
     EditText selectedTimeTxt = (EditText) getActivity().findViewById(R.id.selectedTime); 
     selectedTimeTxt.setText(selectedDate); 
    } 

सब कुछ उम्मीद के रूप में काम करता है, लेकिन मैं क्या जरूरत है उपयोगकर्ता 10 मिनट का ही अंतराल लेने के लिए अनुमति देने के लिए है - उदाहरण के 1:10, 1 के लिए : 20, 1:30, 1:40 आदि ...

क्या इसे संशोधित करना संभव है, या मेरी जरूरतों को पूरा करने के लिए इसे किसी भी तरह विस्तारित करना संभव है? मुझे पता है कि मुझे यहां एक मूल बिंदु याद आ रहा है, लेकिन एक नौसिखिया के रूप में मैं इसे खोजने में सक्षम नहीं हूं।

संपादित

यहाँ मेरे विचार कर रहे हैं:

enter image description here

+1

एक त्वरित गूगल खोज मुझे इस जवाब देने के लिए करते हैं: http://stackoverflow.com/ प्रश्न/7713538/कैसे-टू-सेट-ए-कस्टम-मिनट-अंतराल-इन-टाइमपिकरडियलॉग-इन-एंड्रॉइड/19970113 # 19970113 – cYrixmorten

+0

@cYrixmorten मैंने कोशिश की है और यह काम नहीं कर रहा है। यह केवल अंतराल मूल्य से मिनट गुणा करें। तह पिकर पर भी कोई दृश्य परिवर्तन नहीं है। :( – Slim

+0

टाइमपिकर विचारों जैसे http://stackoverflow.com/questions/2580216/android-timepicker-minutes-to-15 का उपयोग करके अपना स्वयं का कस्टम टाइमपिकरडियलॉग बनाने के बारे में कैसे? टाइमपिकर आपको यह निर्धारित करने की अनुमति देता है कि उसके पास कौन से मूल्य हैं, ताकि आप कर सकें [0 10 "," 20 "," 30 ", ..] मिनटों के विकल्प के रूप में – cYrixmorten

उत्तर

4

आप setDisplayedValues के एक कॉल के साथ, 2 नंबर पिकर (मिनट संख्या पिकर) करने के लिए अपने स्वयं के मूल्यों को निर्धारित कर सकते हैं। हालांकि आपको पहले NumberPicker देखने की आवश्यकता है।

Android डिवाइस मॉनिटर, डिवाइस की स्क्रीन और अलग विचारों पर कब्जा करने का एक अच्छा सुविधा है, तो आप अपने वांछित को देखने के लिए आईडी (या एक पथ) पा सकते हैं:

enter image description here

अपने नए के बाद से मान सरणी 6 मान (0 ... 5) रखती है, आपको वर्तमान मिनटों को दसियों में परिवर्तित करने की आवश्यकता होगी, इसलिए आप सीमा से बाहर नहीं जाते हैं।

यहां एक संपूर्ण उदाहरण है:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final Calendar c = Calendar.getInstance(); 
    int hour = c.get(Calendar.HOUR_OF_DAY); 
    // Convert current minutes to tens 
    // 55 = 50, 56 = 00 
    int minute = c.get(Calendar.MINUTE)/10; 
    minute = (minute > 5) ? 0 : minute; 

    // Create a new instance of TimePickerDialog and return it 
    final TimePickerDialog tpd = new TimePickerDialog(getActivity(), this, hour, minute, 
      DateFormat.is24HourFormat(getActivity())); 

    tpd.setOnShowListener(new DialogInterface.OnShowListener() { 
     @Override 
     public void onShow(DialogInterface dialog) { 
      int tpLayoutId = getResources().getIdentifier("timePickerLayout", "id", "android"); 

      ViewGroup tpLayout = (ViewGroup) tpd.findViewById(tpLayoutId); 
      ViewGroup layout = (ViewGroup) tpLayout.getChildAt(0); 

      // Customize minute NumberPicker 
      NumberPicker minutePicker = (NumberPicker) layout.getChildAt(2); 
      minutePicker.setDisplayedValues(new String[]{"00", "10", "20", "30", "40", "50"}); 
      minutePicker.setMinValue(0); 
      minutePicker.setMaxValue(5); 
     } 
    }); 

    return tpd; 
} 

public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
    minute = minute * 10; 
    Toast.makeText(getActivity(), "Selected minute: " + minute, Toast.LENGTH_LONG).show(); 
} 

संपादित करें:

AppCompat विषय का उपयोग कर, संवाद एक चक्राकार स्लाइडर, जो uncustomizable है दिखाएगा। लेकिन अगर आप एक नए विषय का उपयोग करने के लिए (जो एक समस्या हो नहीं करेगा क्योंकि आपका minSdk 15 है) संवाद बता सकते हैं:

final TimePickerDialog tpd = new TimePickerDialog(getActivity(), 
     android.R.style.Theme_Holo_Light_Dialog, this, hour, minute, 
     DateFormat.is24HourFormat(getActivity())); 
+0

त्रुटि 'आभासी विधि का आह्वान करने का प्रयास' है। android.view.ViewGroup.getChildAt (int) 'चालू करें 'व्यू ग्रुप लेआउट = (व्यू ग्रुप) पर एक शून्य ऑब्जेक्ट रेफरेंस 'tpLayout.getChildAt (0);' :( – Slim

+0

@ स्लिम क्या आप मेरे उत्तर में सटीक कोड का उपयोग कर रहे हैं? आपकी त्रुटि का मतलब यह हो सकता है कि लेआउट अभी तक फुलाया नहीं गया है या यह है मेरे 'टाइमपिकरडियलॉग' से अलग है। मेरे द्वारा पोस्ट की गई विधि (एंड्रॉइड डिवाइस मॉनीटर के साथ) का उपयोग करके यह पुष्टि करें। – Simas

+0

आप मेरा संपादन देख सकते हैं। – Slim

संबंधित मुद्दे