DatePicker MinDate можно выбрать - Android

Я создал minDate() к моему DatePicker Посмотреть. Теперь проблема в том, что я все еще могу выбирать даты до минимальной назначенной даты.

Моя ява:

long thirtyDaysInMilliseconds = 2592000000l;
datePicker.setMinDate(System.currentTimeMillis() - thirtyDaysInMilliseconds); // Setting the minimum date

Мой XML:

 <DatePicker
    android:id="@+id/date_picker_id"
    android:layout_width="fill_parent"
    android:layout_height="200dp"
    android:layout_below="@id/header_id" 

    />

И картинка для демонстрации:

Смотрите, я все еще могу выбрать 1, который не является диапазоном minDate() Я назначил (также 1 - 9 не находится в диапазоне, а 10 - 13 находится в диапазоне). Круг, кроме этого, показывает, что он может быть выбран. Я не хочу нажимать на них. Также я могу получить информацию из этих "невыбранных дат". Почему и как это можно исправить?

1 ответ

У меня была та же проблема для моего DatePicker, который отображается как фрагмент диалога.

Я заметил, что это происходит только на леденце

мое решение НЕ является идеальным, но поможет предотвратить нарушение кода датой, выходящей за пределы допустимого диапазона, но все равно ее можно будет выбрать:(

Так что установите минимальную дату и максимальную дату выбора даты.

    if (mMinDate != null) {
        datePickerDialog.getDatePicker().setMinDate(mMinDate.getTime());
    }

    if (mMaxDate != null) {
        datePickerDialog.getDatePicker().setMaxDate(mMaxDate.getTime());
    }

Затем в вашем коде, где вы извлекаете текущую дату из средства выбора (в моем случае это был диалог с кнопкой ОК), сделайте эту проверку

//Just getting the current date from the date picker
    int day = ((DatePickerDialog) dialog).getDatePicker().getDayOfMonth();
                        int month = ((DatePickerDialog) dialog).getDatePicker().getMonth();
                        int year = ((DatePickerDialog) dialog).getDatePicker().getYear();
                        Calendar calendar = Calendar.getInstance();
                        calendar.set(year, month, day);
                        Date date = calendar.getTime(); //This is what we use to compare with. 


 /** Only do this check on lollipop because the native picker has a bug where the min and max dates are ignored */
                    if (Build.VERSION.SDK_INT >= 21) {
                        boolean isDateValid = true; //Start as OK but as we go through our checks this may become false
                        if(mMinDate != null){
                            //Check if date is earlier than min
                            if(date.before(mMinDate)){
                                isDateValid = false;
                            }
                        }

                        if(mMaxDate != null){
                            //Check if date is later than max
                            if(date.after(mMaxDate)){
                                isDateValid = false;
                            }
                        }
                        if(isDateValid){ //if true we can use date, if false do nothing but you can add some else code
                            /** ALL GOOD DATE APPLY CODE GOES HERE */
                        }
                    }else{ //We are not on lollipop so no need for this check
                        /** ALL GOOD DATE APPLY CODE GOES HERE */
                    }
Другие вопросы по тегам