是否有可能拦截DialogFragment
中的关键按钮?对于天真的问题感到抱歉..我的onBackPressed
的{{1}}从未被调用过。
提前致谢
FragmentActivity
抱歉,我添加了用于显示对话框的代码片段。
答案 0 :(得分:29)
由于您尚未发布任何代码,因此很难确定问题是什么。但我的第一个猜测是,你没有通过调用你用来将片段添加到活动的addToBackStack
的{{1}}方法将DialogFragment添加到后台。
Android文档页面中有一些示例提供了good pattern for using a DialogFragment in your Activity。
的示例由于您正在显示对话框,因此创建的对话框将接收关键事件,而不是父活动。因此,在创建Dialog的片段时设置FragmentTransaction
,并在Dialog.OnKeyListener
上调用setCancelable(false)
以防止后退键将其解除。然后,您可以使用Dialog
的{{1}}方法处理后退键。
答案 1 :(得分:5)
使用后退按钮处理DialogFragment的最佳方法:
mpgv
答案 2 :(得分:3)
Rahul Pundhir's answer会很有效。如果您在对话框中使用Builder模式,则可以执行以下操作:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog alertDialog = new AlertDialog.Builder(getContext())
.setTitle(...)
.setPositiveButton(...)
.setNegativeButton(...)
.setMessage(...)
.create();
alertDialog.setOnKeyListener((dialog, keyCode, event) -> {
if (keyCode == KeyEvent.KEYCODE_BACK
&& event.getAction() == KeyEvent.ACTION_UP) {
// TODO do the "back pressed" work here
return true;
}
return false;
});
return alertDialog;
}
这可以通过模仿系统首先调用onBackPressed()
的方式(忽略跟踪和侦听ACTION_UP)来实现。见the source on Dialog