дата не обновляется в приложении для Android, если оставить открытым на ночь - PullRequest
0 голосов
/ 06 февраля 2019

У меня проблема с одним из приложений, над которыми я работаю.В приложении есть 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 () при нажатии кнопки должно обрабатывать этот сценарий, но это не так.Средство выбора даты показывает вчера как текущий, а сегодняшний день как невыбираемый.

1 Ответ

0 голосов
/ 06 февраля 2019

Поместите DatePickerDialog в onResume ().

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

Каждый раз, когда вы переключаете приложение или блокируете телефон, вызывается onPause (), а когда вы снова открываете свое приложение, вызывается onResume ().

Жизненный цикл активности: https://developer.android.com/guide/components/activities/activity-lifecycle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...