2013-10-27 7 views
12

पर कॉल करने पर काम नहीं करता है, मैं Spinner के चयनित तत्व के अनुसार DatePicker की न्यूनतम और अधिकतम तिथि को बदलने के लिए एक विशेष स्थिति में हूं। यहां कोड का हिस्सा है जिसका उपयोग मैं न्यूनतम और अधिकतम तिथि स्विच करने के लिए कर रहा हूं।डेटमिकर (...) दिनांकपिकर के लिए दूसरी बार

private void switchCalculationMethod(int method) { 
    calculationMethod = method; 
    switch (method) { 
     case METHOD_1: 
      datePicker.setMinDate(new LocalDate().minusWeeks(42).getMillis()); 
      datePicker.setMaxDate(new LocalDate().plusDays(1).getMillis() - 1); 
      break; 
     case METHOD_2: 
      datePicker.setMinDate(new LocalDate().minusWeeks(2).getMillis()); // This don't work!! 
      datePicker.setMaxDate(new LocalDate().plusWeeks(40).getMillis()); // This works!!! 
      break; 
    } 
    datePicker.init(today.getYear(), today.getMonthOfYear() - 1, 
      today.getDayOfMonth(), this); 
} 

तो, DatePicker समस्या तब होती है जब मैं मिनट तारीख फिर से (अधिकतम तारीख काम करता है बदल रहा है) बदलने का प्रयास सही ढंग से पहली बार सेट हो जाएगा। यह उस मूल्य पर रहेगा जो मैंने पहले सेट किया था। मुझे लगता है कि यह एक बग है। क्या मुझसे यहां कुछ गलत हो रहा है? क्या इसके आसपास कोई कार्य है?।

पीएस: मैं जोडा समय एपीआई का उपयोग कर रहा हूं।

+0

किसी भी विशिष्ट कारण से आपने अपने दूसरे सेट MinDate परDateTimeAtStartOfDay() का उपयोग नहीं किया है? – Voidpaw

+0

@Voidpaw कोई नहीं, सवाल संपादित करते समय यह एक गलती थी। मैं अब इसके लिए एक कस्टम विधि का उपयोग कर रहा हूँ। बस सोचा कि मैं सादगी के लिए उस हिस्से को छोड़ दूंगा। सही किया। –

उत्तर

28

यह तब होता है विधि setMinDate() की जाँच

if (mTempDate.get(Calendar.YEAR) == mMinDate.get(Calendar.YEAR) 
       && mTempDate.get(Calendar.DAY_OF_YEAR) != mMinDate.get(Calendar.DAY_OF_YEAR){ 
      return; 
} 

सरल तरीके को पहली बार में अलग वर्ष के साथ मिनट तिथि निर्धारित करने के लिए है क्योंकि, उदाहरण के

mPicker.setMinDate(0); 

mPicker.setMinDate(new LocalDate().minusWeeks(2) 
           .toDateTimeAtStartOfDay().getMillis()); 

यह मेरे लिए काम करता है के लिए। 0

+2

मुझे यकीन नहीं है कि वह चेक क्यों है, लेकिन यह मेरे लिए चाल है। एक इंटर्न होना चाहिए। –

+1

धन्यवाद @ वैंग – Furqan

+0

मैं कहीं और 'डेटपिकरडियलॉग' असाइन कर रहा था, मिनीडेट को बदलने के लिए मुझे 'डेटपिकरडियलॉग' को फिर से असाइन करना था। जैसे 'mpicker = new datePickerDialog (.., ..., ...., ..)' फिर minDate और setMinDate को रीसेट करें। @ निकोलस उत्तर रीसेट 3 में सहायक था। – Prabs

0

पहले अद्यतन setMinDate तो बाद setMinDate आप के अनुसार dateobject

mPicker.setMinDate (0);

mPicker.setMinDate (datepickerObject.getTimeInMillis());

0

यह इस समस्या का कोई अच्छा समाधान नहीं है, लेकिन यह मेरे लिए काम करता है। जब भी टेक्स्ट व्यू क्लिक किया जाता है और आवश्यक तिथियां सेट करता है, तो मैं बस एक नया डेटपिकर बना रहा हूं (न्यूनतम, अधिकतम)। यह स्मृति अनुकूल नहीं हो सकता है, लेकिन मुझे कोई अन्य समाधान नहीं मिला है।

public class CustomDatePicker extends TextView { 

private long mMinDate; 
private long mMaxDate; 

public CustomDatePicker(Context context) { 
    this(context, null, 0); 
} 

public CustomDatePicker(Context context, AttributeSet attrs) { 
    this(context, attrs, 0); 
} 

public CustomDatePicker(Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, 0); 

    final Calendar calendar = Calendar.getInstance(); 
    final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US); 

    final DatePickerDialog.OnDateSetListener onDateSetListener = new DatePickerDialog.OnDateSetListener() { 
     @Override 
     public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { 
      calendar.set(Calendar.YEAR, year); 
      calendar.set(Calendar.MONTH, month); 
      calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); 
      setText(dateFormat.format(calendar.getTime())); 
     } 
    }; 

    mMinDate = -1; 
    mMaxDate = -1; 

    setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      DatePickerDialog datePickerDialog = new DatePickerDialog(
        getContext(), 
        R.style.DatePickerStyle, 
        onDateSetListener, 
        calendar.get(Calendar.YEAR), 
        calendar.get(Calendar.MONTH), 
        calendar.get(Calendar.DAY_OF_MONTH) 
      ); 

      if (mMinDate != -1) datePickerDialog.getDatePicker().setMinDate(mMinDate); 
      if (mMaxDate != -1) datePickerDialog.getDatePicker().setMaxDate(mMaxDate); 
      datePickerDialog.show(); 
     } 
    }); 
} 

public void setMinDate(long minDate) { 
    mMinDate = minDate; 
} 

public void setMaxDate(long maxDate) { 
    mMaxDate = maxDate; 
} 

} 
2

जैसा कि ऊपर कहा, आप वास्तव में मूल्य बदलने से पहले उन पर कॉल करके जांच से बचने कर सकते हैं:

setMinDate(0); 
setMaxDate(Long.MAX_VALUE); 

आप पुनर्स्थापित करने के लिए उसके डिफ़ॉल्ट करने के लिए न्यूनतम या अधिकतम मूल्य चाहते हैं, आप कर सकते हैं निम्न मानों का उपयोग करें:

setMinDate(-2208902400000L); // Jan 1, 1900 
setMaxDate(4102531200000L); // Jan 1, 2100 
संबंधित मुद्दे