2015-09-26 20 views
9

Tôi muốn vô hiệu hóa các ngày trong quá khứ của bộ chọn ngày trong Android. tôi có thể làm điều đó bằng cách sử dụngVẫn có thể chọn ngày đã tắt trong bộ chọn ngày

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

Điều này đang hoạt động tốt và ngày trong quá trình chọn ngày bị tắt. Nhưng tôi vẫn có thể nhấp vào ngày trước đó và chọn nó. Làm thế nào để không để điều đó xảy ra? dưới đây là ảnh chụp màn hình của bảng chọn ngày của tôi: -

enter image description here

Và đây là mã của tôi, nơi tôi đang vô hiệu hóa những ngày qua: -

@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

Đó là lỗi trong lolipop, bạn có thể kiểm tra với phiên bản thấp hơn. Đối với giải pháp, bạn sẽ cần phải áp dụng logic của bạn trên gọi lại của phương pháp 'onDateSet'. –

Trả lời

8

Got biết từ một lời nhận xét rằng đây là một lỗi trong Lollipop. Vì vậy, cố định nó theo chương trình.

Tất cả những gì bạn cần làm là kiểm tra ngày đã chọn với tập hợp ngày tối thiểu.

+0

Bạn có thể chia sẻ mã không? –

+0

bất cứ ai có thể mô tả câu trả lời này rõ ràng với mã mẫu ????? – Elizabeth

4

Có lỗi và bạn cần kiểm tra ngày đã chọn bằng mã java.

Đối ngày qua

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; 
} 

Đối với tương lai ngày

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; 
} 

Chỉ cần vượt qua ngày đã chọn tháng, năm trong phương pháp này và sẽ trở lại giá trị boolean.

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

Đây chính là câu hỏi. Đoạn mã này không hoạt động đúng cách. – deep

0

Để giải quyết lỗi cho Android Lollipop bạn có thể xác thực ngày như sau:

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(); 
    } 
Các vấn đề liên quan