有没有可能拦截DialogFragment
中的按键?对不起,天真的问题。我的FragmentActivity
的onBackPressed
永远不会被调用。
thanks in advance
if (imageFile.exists()) {
ShowPicDialog newFragment = ShowPicDialog.newInstance();
FragmentTransaction ft = manager.beginTransaction();
Fragment prev = manager.findFragmentByTag("picDialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack("picDialog");
newFragment.getArguments().putString("path", imageFile.getAbsolutePath());
newFragment.show(ft, "picDialog");
}
对不起,我添加了我用来显示对话框的代码片段。
4条答案
按热度按时间ljsrvy3e1#
很难说清楚问题是什么,因为你还没有发布任何代码。但我的第一个猜测是,您没有通过调用
FragmentTransaction
的addToBackStack
方法将DialogFragment添加到回栈,而您正在使用该方法将片段添加到Activity。在Android文档页面中有一些例子,给予good pattern for using a DialogFragment in your Activity的例子。
由于您正在显示Dialog,因此创建的Dialog将接收按键事件,而不是父Activity。因此,在创建Dialog的片段时设置
Dialog.OnKeyListener
,并在Dialog
上调用setCancelable(false)
以防止back键将其关闭。然后可以在OnKeyListener
的onkey
方法中处理back键。vyswwuz22#
使用后退按钮处理DialogFragment的最佳方法:
pkwftd7m3#
Rahul Pundhir's answer工作得很好,如果你不使用构建器模式。如果你在你的对话框中使用Builder模式,你可以这样做:
这是通过模仿系统首先调用
onBackPressed()
的方式来实现的(忽略对ACTION_UP的跟踪和侦听)。查看对话框上的源代码x6yk4ghg4#
你可以使用它的对话框/会话对话框和底部工作表对话框,只是改变铸造对话框与您的对话框类型