隔夜开放时,Android应用中的日期不会更新

时间:2019-02-06 19:18:52

标签: android datepickerdialog android-date

我正在使用的其中一个应用程序出现问题。该应用程序中有一个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()可以处理这种情况,但事实并非如此。日期选择器显示昨天为当前,今天为不可选择。

1 个答案:

答案 0 :(得分:0)

将DatePickerDialog放在onResume()中。

@Override
public void onResume(){
    super.onResume();
    //your code here
}

无论何时切换应用程序或锁定手机,都会调用onPause(),而再次打开应用程序时,则会调用onResume()。

活动生命周期:https://developer.android.com/guide/components/activities/activity-lifecycle