2

アプリケーションにキャンセル不可のダイアログを表示していますが、ユーザーが検索ボタンを押すとキャンセルされます。onSearchRequestedとonKeyDownをオーバーライドしようとしましたが、役に立ちません。なにか提案を?

4

2 に答える 2

3

私もこの問題に遭遇しました、そして、ジャマサンの解決策は私のために働きませんでした。代わりに、カスタムダイアログクラス(Dialogの拡張)に次のコードを追加しました。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_SEARCH) {
        return true;
    } else {
        return false;
    }
}

keyCodeとKeyEvent.KEYCODE_SEARCHはどちらもintです。onKeyDownのドキュメントには

イベントを処理した場合は、trueを返します。イベントが次の受信者によって処理されることを許可する場合は、falseを返します。

私のために働きます。

于 2011-03-28T15:57:39.943 に答える
0

アクティビティのonKeyDownイベントをオーバーライドし、KEYCODE_SEARCHがfalseを返すかどうかを確認します

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {

    char c = (char) event.getUnicodeChar();

    if (c == KeyEvent.KEYCODE_SEARCH) {
        return false;
    } else {
        return super.onKeyDown(keyCode, event);
    }
}

falseを返すと、そのキーの押下がブロックされます(発生しなかったかのように)。それ以外の場合、super.onKeyDown(..)を実行すると、定期的に処理されます。

幸運を。

于 2011-03-04T23:53:56.757 に答える