Intereting Posts
Android скопирует существующий проект с новым именем в Android Studio Можно ли использовать Python для написания кросс-платформенных приложений для iOS и Android? Как сделать меню боковой панели Как добавить текст в формате в текст? Почему некоторые Android-телефоны заставляют наше приложение бросать java.lang.UnsatisfiedLinkError? DialogInterface vs Просмотр OnClickListeners Android: токен Firebase при первом запуске равен нулю Как вставить% 20 ​​вместо места в android Android SDK: как настроить яркость экрана Добавить атрибут в теге «приложение» в AndroidManifest из плагина cordova Различия между Jar, Android Library и Android Library Project Как вы принудительно изменяете конфигурацию в тесте Android Robolectric? Обработка push-уведомления в приложении Android Phonegap Почему мой размер приложения и текущая версия «меняются с помощью устройства», хотя я загрузил только один APK? Как отключить раскрывающееся меню AutoCompleteTextView при прокрутке моего автозаполнения?

SetMinDate (…) для DatePicker не работает, когда вызывается второй раз

Я в определенной ситуации, когда мне нужно изменить минимальную и максимальную дату DatePicker соответствии с выбранным элементом Spinner . Вот кусок кода, который я использую, чтобы переключать минимальную и максимальную дату.

 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 будет правильно настроен в первый раз, проблема возникает, когда я пытаюсь изменить дату min снова (изменение максимальной даты работает). Он остался бы на том значении, которое я установил первым. Я думаю, что это ошибка. Я здесь что-то не так? Есть ли обходной путь для этого ?.

PS: Я использую время Джоды.

Solutions Collecting From Web of "SetMinDate (…) для DatePicker не работает, когда вызывается второй раз"

Это происходит потому, что метод 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()); 

Меня устраивает.

Сначала установите updateMinDate на 0 после этого setMinDate в соответствии с вами dateobject

mPicker.setMinDate (0);

mPicker.setMinDate (datepickerObject.getTimeInMillis ());

Это не очень хорошее решение этой проблемы, но оно работает для меня. Я просто создаю новый DatePicker каждый раз, когда нажимают TextView и устанавливают необходимые даты (min, max). Возможно, это не дружелюбная к памяти, но я не нашел другого решения.

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

Как было сказано выше, вы можете обойти проверку, вызвав их до фактического изменения значения:

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

Если вы хотите сбросить минимальное или максимальное значение по умолчанию, вы можете использовать следующие значения:

 setMinDate(-2208902400000L); // Jan 1, 1900 setMaxDate(4102531200000L); // Jan 1, 2100