Java 如何在android中显示警报时检测搜索按钮

Java 如何在android中显示警报时检测搜索按钮,java,android,dialog,android-alertdialog,Java,Android,Dialog,Android Alertdialog,嗨,朋友们 我最近遇到了一个问题,当屏幕上显示警报时,如何在android中禁用全局搜索按钮。我不想使用搜索按钮使警报框消失。我需要提醒用户必须单击alertbox按钮并以这种方式消失。因此,我想在显示alertbox时禁用搜索按钮。但是我可以使用setCanable(false)禁用后退按钮。我如何解决这个问题 提前感谢。因此,您的目的是提供不可取消的警报。 建议设置OnDismissListener,然后再次显示警报。从视觉角度看,它不是很好(警报关闭并再次打开)。 下面是如何实现此类不可取

嗨,朋友们

我最近遇到了一个问题,当屏幕上显示警报时,如何在android中禁用全局搜索按钮。我不想使用搜索按钮使警报框消失。我需要提醒用户必须单击alertbox按钮并以这种方式消失。因此,我想在显示alertbox时禁用搜索按钮。但是我可以使用setCanable(false)禁用后退按钮。我如何解决这个问题


提前感谢。

因此,您的目的是提供不可取消的警报。 建议设置OnDismissListener,然后再次显示警报。从视觉角度看,它不是很好(警报关闭并再次打开)。 下面是如何实现此类不可取消警报的一些明显示例(代码位于Acctivity类中):


但是,我不认为为用户留下此类警报是正确的方法,有时在评估限制等情况下可能需要这样做。

因此,您的目的是提供不可取消的警报。 建议设置OnDismissListener,然后再次显示警报。从视觉角度看,它不是很好(警报关闭并再次打开)。 下面是如何实现此类不可取消警报的一些明显示例(代码位于Acctivity类中):


但是,我不认为为用户留下此类警报是正确的方法,有时在评估限制等情况下可能需要这样做。

在活动中覆盖
onSearchRequested
,并在显示对话框时返回
false
。这将阻止请求,根据:

您可以覆盖此功能以强制全局搜索,例如在 响应专用搜索键,或完全阻止搜索(通过 简单地返回false)

如果启动搜索,则返回true;如果活动阻止搜索,则返回false。这个 默认实现总是返回true


在“活动”中重写搜索请求,并在显示对话框时使其返回
false
。这将阻止请求,根据:

您可以覆盖此功能以强制全局搜索,例如在 响应专用搜索键,或完全阻止搜索(通过 简单地返回false)

如果启动搜索,则返回true;如果活动阻止搜索,则返回false。这个 默认实现总是返回true

只需将上面的代码添加到警报对话框生成器。希望这个片段能有所帮助。祝你好运


只需将上面的代码添加到警报对话框生成器。希望这个片段能有所帮助。祝你好运。

你到底是什么意思?你能提供一个更好的问题吗,因为我完全不懂..嗨,androider,我的应用程序显示警报框时,我不想使用搜索按钮删除要删除的警报框。因此,我需要在显示警报框时禁用搜索按钮。您的问题以及评论真的令人困惑:-/Hi sheikh Aman我编辑了我的问题。希望现在你得到了它,我认为使用
setCancable(false)
是正确的方法,即使它没有禁用全局搜索按钮。因为这是系统在出现不可取消警报时的常规行为。你的确切意思是什么?你能提供一个更好的问题吗,因为我完全不懂..嗨,androider,我的应用程序显示警报框时,我不想使用搜索按钮删除要删除的警报框。因此,我需要在显示警报框时禁用搜索按钮。您的问题以及评论真的令人困惑:-/Hi sheikh Aman我编辑了我的问题。希望现在你得到了它,我认为使用
setCancable(false)
是正确的方法,即使它没有禁用全局搜索按钮。因为这是系统在出现不可取消警报时的常规行为。
/** reference to our alert */
private AlertDialog alert = null;
/** to indicate if alert dismissed by key */
private boolean alertKeyPressed = false;

@Override
protected void onResume() {

    // Say, we need to show alert when activity resumed

    if(true/*provide condition to show alert*/) {

        showAlert();
    }
}

/**
 * Show non dismissable alert
 */
private void showAlert() {
    if(null == this.alert) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);

        builder.setCancelable(false);
        builder.setTitle(R.string.str_alert_title);
        builder.setMessage(R.string.str_alert_text);
        builder.setIcon(android.R.drawable.ic_dialog_alert);

        builder.setNeutralButton("OK", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {

                YourActivity.this.alertKeyPressed = true;

                dialog.dismiss();
            }
        });

        this.alert = builder.create();

        this.alert.setOwnerActivity(this);
        this.alert.show();

        this.alert.setOnDismissListener(new DialogInterface.OnDismissListener() {

            @Override
            public void onDismiss(DialogInterface dialog) {


                // dialog is not allowed to be dismissed, so show it again
                YourActivity.this.alert = null;

                if(!YourActivity.this.alertKeyPressed) {
                    showAlert();
                }
            }
        });
    }
}
.setOnKeyListener(new DialogInterface.OnKeyListener()
{   
    @Override
    public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event)
    {
        //There you catch the key, do whatever you want to do.
        //Return true if you handled the key event, so nothing will trigger.
        //Return false if you want your activity to handle.
        return true;
    }
})