2015-09-26 58 views
9

我想在android中禁用日期選擇器的過去日期。 我可以用仍然能夠選擇日期選擇器中的禁用日期

dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 

這是工作的罰款,並在日期選取過去的日期看起來禁用做到這一點。但我仍然可以點擊以前的日期並選擇它。 如何不讓這種情況發生?下面 是我的日期選擇器的截圖: -

enter image description here

這裏是我的代碼,我在哪裏禁用過去的日期: -

@Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current date as the default date in the picker 
     final Calendar c = Calendar.getInstance(); 
     int year = c.get(Calendar.YEAR); 
     int month = c.get(Calendar.MONTH); 
     int day = c.get(Calendar.DAY_OF_MONTH); 
     mActivity = new WeakReference<CreateEvent>(
       (CreateEvent) getActivity()); 

     DatePickerDialog dialog = new DatePickerDialog(getActivity(), this, year, month, day); 

     if(callingView==fromDate){ 
      dialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 
     }else if (callingView==toDate){ 
      dialog.getDatePicker().setMinDate(fromD); 
     } 

     // Create a new instance of DatePickerDialog and return it 
     return dialog; 
    } 
+2

它是棒棒糖的bug,你可以用較低的版本檢查。對於解決方案,您需要在onDateSet方法的回調中應用您的邏輯。 –

回答

8

得從一個評論,這是知道棒棒糖中的一個錯誤。所以,以編程方式修復它。

您只需要檢查所選日期和最短日期集。

+0

你可以分享代碼嗎? –

+0

任何人都可以用示例代碼清楚地描述這個答案????? – Elizabeth

4

是的,這是一個錯誤,你需要使用java代碼檢查選定的日期。

對於過去的日期

public static boolean validatePastDate(Context mContext,int day,int month,int year){ 
    final Calendar c = Calendar.getInstance(); 
    int currentYear = c.get(Calendar.YEAR); 
    int currentMonth = c.get(Calendar.MONTH)+1; 
    int currentDay = c.get(Calendar.DAY_OF_MONTH); 
    if (day > currentDay && year == currentYear && month == currentMonth) { 
     Toast.makeText(mContext, "Please select valid date", Toast.LENGTH_LONG).show(); 
     return false; 
    } else if (month > currentMonth && year == currentYear) { 
     Toast.makeText(mContext, "Please select valid month", Toast.LENGTH_LONG).show(); 
     return false; 
    } else if (year > currentYear) { 
     Toast.makeText(mContext, "Please select valid year", Toast.LENGTH_LONG).show(); 
     return false; 
    } 

    return true; 
} 

對於未來的日期

public static boolean validateFutureDate(Context mContext,int day,int month,int year){ 
    final Calendar c = Calendar.getInstance(); 
    int currentYear = c.get(Calendar.YEAR); 
    int currentMonth = c.get(Calendar.MONTH)+1; 
    int currentDay = c.get(Calendar.DAY_OF_MONTH); 
    if (day < currentDay && year == currentYear && month == currentMonth) { 
     Toast.makeText(mContext, "Please select valid date", Toast.LENGTH_LONG).show(); 
     return false; 
    } else if (month < currentMonth && year == currentYear) { 
     Toast.makeText(mContext, "Please select valid month", Toast.LENGTH_LONG).show(); 
     return false; 
    } else if (year < currentYear) { 
     Toast.makeText(mContext, "Please select valid year", Toast.LENGTH_LONG).show(); 
     return false; 
    } 

    return true; 
} 

只是通過選定的日期一個月,一年中這個方法將返回boolean值。

0
datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 
+0

這正是問題所在。這段代碼沒有正確執行其工作。 – deep

0

要解決的運行Android Lollipop的錯誤,你可以驗證日期如下:

int mYear,mMonth,mDay; 
    Calendar mcurrentDate = Calendar.getInstance(); 
    mYear = mcurrentDate.get(Calendar.YEAR); 
    mMonth = mcurrentDate.get(Calendar.MONTH); 
    mDay = mcurrentDate.get(Calendar.DAY_OF_MONTH); 


    DatePickerDialog mDatePicker = new DatePickerDialog(context, new DatePickerDialog.OnDateSetListener() { 
     public void onDateSet(DatePicker datepicker, int selectedyear, int selectedmonth, int selectedday) { 
     // TODO Auto-generated method stub 

     // validate here with condition to avoid to select past dates 
      if (selectedyear == mYear && (selectedmonth+1) == mMonth+1) { 
       if(selectedday < mDay){ 
        Toast.makeText(context, "invalid date", Toast.LENGTH_LONG).show(); 
        return; 
       } 
      } 


       textview.setText(selectedday + "/" + (selectedmonth+1) + "/" + selectedyear); 

     } 
    }, mYear, mMonth, mDay); 

    mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 
    if(!mDatePicker.isShowing()){ 
     mDatePicker.show(); 
    } 
相關問題