使用DialogFragment时如何挂钩后退事件?

时间:2014-11-20 23:57:24

标签: android android-activity android-fragments android-dialogfragment

我想知道当我的应用显示DialogFragment时用户何时按下后退按钮。仅当没有DialogFragment时,才会调用 Activity.onBackPressed()。当DialogFragment打开时,按回会关闭对话框,但不会调用onBackPressed()。我需要挂钩此事件,因为我需要关闭对话框和活动。

挂钩DialogFragment.onDismiss()并不够好,因为无论对话如何被解除,它都会被调用。我只想在用户按下时关闭活动。

提前致谢...

2 个答案:

答案 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();