我正在使用的其中一个应用程序出现问题。该应用程序中有一个DatePickerDialog,在ActionBar中带有一个日历图标。我正在这样设置...
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()可以处理这种情况,但事实并非如此。日期选择器显示昨天为当前,今天为不可选择。
答案 0 :(得分:0)
将DatePickerDialog放在onResume()中。
@Override
public void onResume(){
super.onResume();
//your code here
}
无论何时切换应用程序或锁定手机,都会调用onPause(),而再次打开应用程序时,则会调用onResume()。
活动生命周期:https://developer.android.com/guide/components/activities/activity-lifecycle