CancelListener и DismissListener не работают для TimePickerDialog и DatePickerDialog - PullRequest
0 голосов
/ 15 апреля 2020

Я новичок в Android Studio. Я пытаюсь отобразить фрагмент выбора времени и фрагмента даты последовательно, чтобы пользователь мог выбрать дату и время, но у меня возникают проблемы с обнаружением нажатия кнопки отмены для любого фрагмента. Я пробовал .setOnCancelListener и .setOnDismissListener, но ни одна из двух не работает при нажатии кнопки отмены. Сообщение журнала никогда не отображается. Нет сообщения об ошибке или что-то, просто ничего не происходит. Не знаю, в чем проблема, я перепробовал все, что смог найти в Интернете, но безрезультатно. Код, устанавливающий неработающий слушатель, находится здесь:

DatePickerDialog dateDialog = new DatePickerDialog(getActivity(), this, year, month, day);
dateDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
dateDialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
   @Override
   public void onDismiss(DialogInterface dialog) {
      // If the user presses cancel when selecting the date
      Log.i("BlockButton", "Date Dialog cancelled"); // This log message is never displayed
      SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(getActivity());
      SharedPreferences.Editor prefsEditor = sharedPref.edit();
      prefsEditor.putBoolean("dateSelected", false); // This SharedPreference isn't changed either
      prefsEditor.apply();
   }
});

И код вызова вызова фрагмента находится здесь:

public void showDatePickerDialog() {
    DialogFragment newFragment = new DatePickerFragment();
    newFragment.show(getSupportFragmentManager(), "datePicker");
}

Это почти то же самое для фрагмента TimePicker. Что я мог сделать не так?

1 Ответ

0 голосов
/ 28 апреля 2020

Проблема несколько решена путем полного устранения проблемы. Поскольку .setOnDismissListener и .setOnCancelListener не работали, вместо этого я создал переменную, установленную в false по умолчанию. Тогда, только если кнопка ОК была нажата в конце фрагмента, переменная будет установлена ​​на true. Таким образом, если фрагмент отклонен, а переменная по-прежнему равна false, мы знаем, что была нажата кнопка «Отмена».

Надеюсь, это имеет смысл.

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