как обнаружить кнопку поиска, когда предупреждение отображается в Android - PullRequest
2 голосов
/ 29 июля 2011

Привет, друзья, стекаповский поток

Недавно я столкнулся с проблемой, которая заключается в том, как отключить кнопку глобального поиска в Android, когда на экране отображается предупреждение. Я не хочу закрывать окно предупреждения с помощью кнопки поиска,Мне нужно, чтобы пользователь нажал кнопку оповещения и исчез при этом. Поэтому я хочу отключить кнопку поиска, пока отображается окно оповещения.Но я могу отключить кнопку «назад», используя setCancable (false). Как я могу решить эту проблему?

Спасибо заранее.

Ответы [ 3 ]

0 голосов
/ 01 сентября 2011

Переопределите onSearchRequested в своей Активности и верните false во время отображения диалога. Это должно заблокировать запрос согласно документам :

Вы можете переопределить эту функцию для принудительного глобального поиска, например, в ответ на выделенный поисковый ключ или полностью заблокировать поиск ( просто возвращая ложь).

Возвращает true, если поиск запущен, и false, если активность блокирует его. реализация по умолчанию всегда возвращает true.

0 голосов
/ 26 января 2012
.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;
    }
})

Просто добавьте код выше, чтобы предупредить построителя диалога. Надеюсь, этот фрагмент поможет. Удачи.

0 голосов
/ 01 сентября 2011

Итак, вы намереваетесь предоставить неотменяемое оповещение. Предлагая установить 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();
                }
            }
        });
    }
}

Однако я не думаю, что это правильный способ оставить такое предупреждение для пользователя, иногда это может понадобиться в таких случаях, как ограничение оценки и т. Д.

...