Bla*_*elt 28 android android-fragments
是否有可能拦截钥匙扣DialogFragment?抱歉天真的问题...... onBackPressed我FragmentActivity的永远不会被召唤.
提前致谢
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");
}
Run Code Online (Sandbox Code Playgroud)
抱歉,我添加了用于显示对话框的代码片段.
Jas*_*run 31
由于您尚未发布任何代码,因此很难确定问题是什么.但我的第一个猜测是你没有通过调用你用来将片段添加到活动的addToBackStack方法将DialogFragment添加到后台FragmentTransaction.
Android文档页面中有一些示例提供了在Activity中使用DialogFragment的良好模式示例 .
由于您正在显示对话框,因此创建的对话框将接收关键事件,而不是父活动.因此,Dialog.OnKeyListener在创建Dialog的片段时设置一个,并调用setCancelable(false)它Dialog以防止后退键解除它.然后,您可以处理您的返回键OnKeyListener的onkey方法.
小智 7
使用后退按钮处理DialogFragment的最佳方法:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new Dialog(getActivity(), getTheme()){
@Override
public void onBackPressed() {
// On backpress, do your stuff here.
}
};
}
Run Code Online (Sandbox Code Playgroud)
如果您不使用构建器模式,那么Rahul Pundhir的答案非常有用。如果您在对话框上使用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;
}
Run Code Online (Sandbox Code Playgroud)
通过模仿系统一开始的调用方式onBackPressed()(忽略跟踪和监听ACTION_UP)来工作。在Dialog上查看源代码
| 归档时间: |
|
| 查看次数: |
28160 次 |
| 最近记录: |