我想知道当我的应用显示DialogFragment时用户何时按下后退按钮。仅当没有DialogFragment时,才会调用 Activity.onBackPressed()。当DialogFragment打开时,按回会关闭对话框,但不会调用onBackPressed()。我需要挂钩此事件,因为我需要关闭对话框和活动。
挂钩DialogFragment.onDismiss()并不够好,因为无论对话如何被解除,它都会被调用。我只想在用户按下时关闭活动。
提前致谢...
答案 0 :(得分:2)
您可以将一个键侦听器附加到DialogFragment用于显示其内容的Dialog。要访问Dialog,请覆盖DialogFragment中的onCreateDialog:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = super.onCreateDialog(savedInstanceState);
dialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
new Handler().post(new Runnable() {
@Override
public void run() {
getActivity().finish();
}
});
}
return false;
}
});
return dialog;
}
我不确定你是否需要将调用包装在Runnable中完成。在对话有机会被解雇之前完成活动似乎有点冒险。通过发布Runnable,您可以正常处理密钥,让Android关闭对话框,之后您发布的Runnable也将运行以完成活动。
答案 1 :(得分:0)
您可以覆盖对话框片段的onDetach方法();
public void Detach() {
getActivity.finish();
super.detach();
}
或者您可以从
等活动中调用方法((MyActivity)getActivity()).myMethod();