防止后退buttonclosures对话框

我试图防止在Android中按下后退button时closuresAlertDialog框。 我已经在这个线程中遵循了两种常用的方法,并且使用System.out.println我可以看到在这两种情况下代码都会执行。 但是,后退button仍然closures对话框。

我可能做错了什么? 最终,我试图阻止后退buttonclosures对话框 – 这是一个免责声明,显示在第一次运行应用程序,我不希望用户有任何选项,但要按下“接受”button为了继续下去。

只需使用setCancelable()function:

 AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setCancelable(false); 

这可以防止后退buttonclosures对话框,但是如果您select使用它,则会保留“否定”button。


尽pipe任何不愿意接受服务条款的用户都可以通过Squonk的评论来推送主页button,但还有两种方法可以防止他们“退出”用户协议。 一个是简单的“拒绝”button,另一个覆盖对话框中的后退button:

 builder.setNegativeButton("Refuse", new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { finish(); } }) .setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) finish(); return false; } }); 

为了防止后退buttonclosures一个对话框(不依赖于活动),只是下面的代码:

 alertDialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { // Prevent dialog close on back press button return keyCode == KeyEvent.KEYCODE_BACK; } }); 

使用setCancelable(false)

 SampleDialog sampleDialog = SampleDialog.newInstance(); sampleDialog.setCancelable(false); sampleDialog.show(getSupportFragmentManager(), SampleDialog.class.getSimpleName()); 

只有这对我有用:

 AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(title); builder.setMessage(content); /** * Make it when the Back button is pressed, the dialog isn't dismissed. */ builder.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP) { Utilities.makeToast(getContext(), "There is no way back!"); return true; // Consumed } else { return false; // Not consumed } } }); Dialog dialog = builder.create(); /** * Make it so touching on the background activity doesn't close the dialog */ dialog.setCanceledOnTouchOutside(false); return dialog; 

正如你所看到的,我还添加了一个dialog.setCanceledOnTouchOutside(false); 所以在对话框外轻敲也不会导致它被closures。

当使用DialogFragment您需要在片段上调用setCancelable() ,而不是对话框:

 @Override public Dialog onCreateDialog(Bundle savedInstanceState) { dialog = new ProgressDialog(getActivity()); dialog.setIndeterminate(true); dialog.setMessage(...); setCancelable(false); return dialog; } 

调用dialog.setCancelable()似乎没有效果。 似乎DialogFragment不会注意到对话框的取消设置。

    Interesting Posts