作为胡安·佩德罗·马丁内斯(Juan Pedro Martinez)回答的附录,我认为在查看此线程时澄清一个特定问题(我有一个)会有所帮助。
如果您希望创建一个新的 DialogFragment 并拥有它,以便用户只能使用后退按钮取消它,这消除了随机屏幕触摸过早取消片段的情况,那么这就是您将使用的代码。
在您调用 DialogFragment 的任何代码中,您需要将可取消设置设置为 false,以便 NOTHING 关闭片段、没有杂散屏幕触摸等。
DialogFragment mDialog= new MyDialogFragment();
mDialog.setCancelable(false);
mDialog.show(getFragmentManager(), "dialog");
然后,在您的 DialogFragment 中,在本例中为 MyDaialogFragment.java,您添加 onResume 覆盖代码以使对话框侦听后退按钮。当它被按下时,它将执行dismiss()来关闭片段。
@Override
public void onResume()
{
super.onResume();
getDialog().setOnKeyListener(new OnKeyListener()
{
@Override
public boolean onKey(android.content.DialogInterface dialog,
int keyCode,android.view.KeyEvent event)
{
if ((keyCode == android.view.KeyEvent.KEYCODE_BACK))
{
// To dismiss the fragment when the back-button is pressed.
dismiss();
return true;
}
// Otherwise, do nothing else
else return false;
}
});
}
现在您的对话框将在“setCancelable”为 false 的情况下被调用,这意味着没有任何东西(没有外部点击)可以取消它并关闭它,并且只允许(从对话框本身)返回按钮来关闭它。
甘巴特!