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

时间:2011-07-29 08:31:28

标签: java android dialog alertdialog

嗨stackoverflow朋友

我最近遇到了一个问题,即如何在屏幕上显示警报时禁用Android中的全局搜索按钮。我不想使用搜索按钮消除警报框。我需要用户必须单击警告框按钮并以这种方式消失。所以我想在显示警告框时禁用搜索按钮。但我可以使用setCancable(false)禁用后退按钮。我该如何解决这个问题?

提前谢谢。

3 个答案:

答案 0 :(得分:0)

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

/** 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();
                }
            }
        });
    }
}

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

答案 1 :(得分:0)

在您的活动中覆盖onSearchRequested,并在显示对话框时让它返回false。根据{{​​3}}:

,这应该会阻止请求
  

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

     

如果搜索启动则返回true,如果活动阻止,则返回false。该   默认实现始终返回true。

答案 2 :(得分:0)

.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;
    }
})

只需将上面的代码添加到警告对话框构建器即可。希望这段代码会有所帮助。祝你好运。