关闭片段 backPress 上的不可取消对话框 - Android
Dismiss non-cancelable dialog on fragment backPress - Android
我有一个导航抽屉 activity 和许多通过导航抽屉到达的片段。
在其中一些片段中,我显示了一个对话框,其中显示 "Loading.." 后台任务正在执行。
现在我已将我的对话框设置为无法通过 dialog.setCancelable(false)
取消,这样用户就不会通过单击屏幕上的任意位置而意外关闭它。这使得即使按下 phone 后退按钮也无法取消。
这是我的对话框的代码 -
Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_progress_dialog);
((TextView)dialog.findViewById(R.id.custom_dialog_message)).setText("Loading ...");
dialog.setCancelable(false);
dialog.show();
我需要编写代码来关闭加载对话框并在任何片段上按下 phone 后退按钮时转到上一个片段。
有人可以帮帮我吗?大多数情况下,我需要实现特定于片段的 backPress。谢谢!
就这么简单
dialog.setOnKeyListener(new Dialog.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
dialog.dismiss();
}
return true;
}
});
删除您的代码行:
dialog.setCancelable(false);
放上这个试试
dialog.setCanceledOnTouchOutside(false);
有了这个,如果用户不小心触摸到屏幕,你的对话框将不会取消,但如果用户按下后退按钮,它就会取消
你可以使用getFragmentManager().popBackStackImmediate();
dialog.setOnKeyListener(new Dialog.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
dialog.dismiss();
getFragmentManager().popBackStackImmediate();
}
return true;
}
});
请将以下代码放在初始化 alertDialogbuilder
的地方。
alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setOnKeyListener(new Dialog.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
dialog.dismiss();
getFragmentManager().popBackStackImmediate();
}
return true;
}
});
我有一个导航抽屉 activity 和许多通过导航抽屉到达的片段。
在其中一些片段中,我显示了一个对话框,其中显示 "Loading.." 后台任务正在执行。
现在我已将我的对话框设置为无法通过 dialog.setCancelable(false)
取消,这样用户就不会通过单击屏幕上的任意位置而意外关闭它。这使得即使按下 phone 后退按钮也无法取消。
这是我的对话框的代码 -
Dialog dialog = new Dialog(context);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.custom_progress_dialog);
((TextView)dialog.findViewById(R.id.custom_dialog_message)).setText("Loading ...");
dialog.setCancelable(false);
dialog.show();
我需要编写代码来关闭加载对话框并在任何片段上按下 phone 后退按钮时转到上一个片段。
有人可以帮帮我吗?大多数情况下,我需要实现特定于片段的 backPress。谢谢!
就这么简单
dialog.setOnKeyListener(new Dialog.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
dialog.dismiss();
}
return true;
}
});
删除您的代码行:
dialog.setCancelable(false);
放上这个试试
dialog.setCanceledOnTouchOutside(false);
有了这个,如果用户不小心触摸到屏幕,你的对话框将不会取消,但如果用户按下后退按钮,它就会取消
你可以使用getFragmentManager().popBackStackImmediate();
dialog.setOnKeyListener(new Dialog.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
dialog.dismiss();
getFragmentManager().popBackStackImmediate();
}
return true;
}
});
请将以下代码放在初始化 alertDialogbuilder
的地方。
alertDialogBuilder = new AlertDialog.Builder(this);
alertDialogBuilder.setOnKeyListener(new Dialog.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
dialog.dismiss();
getFragmentManager().popBackStackImmediate();
}
return true;
}
});