我是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片段几乎是同一回事。我做错了什么?
问题通过完全避免该问题得到了一定程度的解决。由于.setOnDismissListener
和.setOnCancelListener
不起作用,我要做的是创建一个默认设置为false
的变量。然后,只有在片段末尾按下OK按钮时,变量才会设置为true
。这样,如果片段消失了,并且变量仍然等于false,那么我们知道按下了取消按钮。
希望这很有道理。