CancelListener和DismissListener对于TimePickerDialog和DatePickerDialog不起作用

问题描述 投票:0回答:1

我是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片段几乎是同一回事。我做错了什么?

android
1个回答
0
投票

问题通过完全避免该问题得到了一定程度的解决。由于.setOnDismissListener.setOnCancelListener不起作用,我要做的是创建一个默认设置为false的变量。然后,只有在片段末尾按下OK按钮时,变量才会设置为true。这样,如果片段消失了,并且变量仍然等于false,那么我们知道按下了取消按钮。

希望这很有道理。

© www.soinside.com 2019 - 2024. All rights reserved.