我有一个工作的DatePickerFragment,它扩展了DialogFragment。在onCreateDialog()中设置了一个DatePickerDialog,然后尝试添加:
"picker.setCanceledOnTouchOutside(true);"
我正在使用Android 8.0 Oreo设备进行测试,当触摸DatePicker对话框外部时,没有任何反应。我使用androidx.appcompat.app.AppCompatActivity作为我的BaseActivity和androidx.fragment.app.DialogFragment用于DialogFragment;
代码:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceState);
DatePickerDialog picker = new DatePickerDialog(getActivity(),this,year,month,day);
**picker.setCanceledOnTouchOutside(true);**
return picker;
这是创建 Fragment 的 Activity 代码:
DatePickerFragment newFragment = new DatePickerFragment();
// tried the below also, with no luck
**newFragment.setCancelable(true);**
newFragment.show(getSupportFragmentManager(), "datePicker");
我也在DialogFragment中尝试了下面的代码,但仍然没有成功:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
getDialog().setCanceledOnTouchOutside(true);
...
}
并且:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if (getDialog() != null) {
getDialog().setCanceledOnTouchOutside(true);
}
return super.onCreateView(inflater, container, savedInstanceState);
}
我参考了这篇帖子以获取可能的答案:如何在点击对话框外部时关闭 DialogFragment?。我漏掉了什么?
myDatePickerFragment.show(getSupportFragmenetManager(), "tag")
。 - Vall0ngetDialog().setCanceledOnTouchOutside()
放在我的片段的onStart
中,并且对我很有效。 如果这不起作用,我建议您在DatePickerFragment中使用isCancelable
进行调试。 另外,您是否在对话框中使用了自定义布局? - Saurabh