У меня проблема с одним из приложений, над которыми я работаю.В приложении есть DatePickerDialog со значком календаря на панели действий.Я настраиваю его так ...
MainActivity.java
//...
private final Calendar myCal = Calendar.getInstance();
private final DatePickerDialog.OnDateSetListener dateListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker picker, int i, int i1, int i2) {
myCal.set(Calendar.YEAR, i);
myCal.set(Calendar.MONTH, i1);
myCal.set(Calendar.DAY_OF_MONTH, i2);
if(myCal.getTimeInMillis() < minCalendarDateAllowed) {
//show toast.
} else {
pageDateMillis = myCal.getTimeInMillis();
updateToolbar();
}
}
};
@Override
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
myCal.setTimeInMillis(pageDateMillis);
dialog = new DatePickerDialog(MainActivity.this,
dateListener,
myCal.get(Calendar.YEAR),
myCal.get(Calendar.MONTH),
myCal.get(Calendar.DAY_OF_MONTH));
dialog.getDatePicker().setMaxDate(new Date().getTime());
...
// get start date from SharedPreferences (stored as long)
minCalendarDateAllowed = startDate;
dialog.getDatePicker().setMinDate(startDate);
...
}
// UPDATED POST TO SHOW THIS FUNCTION
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void setupToolbar() {
//setup toolbar
...
myCal.setTimeInMillis(new Date().getTime());
pageDateMillis = System.currentTimeMillis();
//get startDate from SharedPreferences (stored as long)
dialog.getDatePicker().setMinDate(startDate);
dialog.getDatePicker().setMaxDate(new Date().getTime());
minCalendarDateAllowed = startDate;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if(id == android.R.id.home) {
//Calendar icon is taking the place of the home icon
if(startDate == 0L) {
//get start date from SharedPreferences (stored as long)
}
dialog.getDatePicker().setMaxDate(new Date().getTime());
dialog.getDatePicker().setMinDate(startDate);
dialog.show();
return true;
}
return super.onOptionsItemSelected(item);
}
Все это прекрасно работает, если вы не открываете приложение, а затем, пока приложение работает, переверните экранвыкл, не трогайте телефон до завтра, затем попробуйте использовать приложение.когда вы щелкаете по значку календаря, диалоговое окно выбора даты отображается, как и ожидалось, но оно по-прежнему показывает дату вчерашнего дня, поскольку текущая дата и текущая дата недоступны для выбора.Если вы покинете приложение и вернетесь к нему, оно снова будет работать, как и ожидалось.Я не совсем уверен, как решить эту проблему, потому что я никогда не оставлял приложение открытым и активным в одночасье. Я думал, что добавление setMaxDate к новой функции Date () при нажатии кнопки должно обрабатывать этот сценарий, но это не так.Средство выбора даты показывает вчера как текущий, а сегодняшний день как невыбираемый.