3

ダイアログで動作する Android ライブラリを作成しました。Android 2.3.6 を搭載した Samsung Galaxy S1 Plus I9005 でテストしたところ、デバイスのメニュー ボタンを長押しすると、アクティブなダイアログがすぐに閉じられることがわかりました。そのボタンを長押しする目的すらわかりません。デバイスを知らない人のために、この写真は私が何を意味するかを示すはずです: サムスンギャラクシー S1

この問題は、Android 4.x で実行されているデバイスでは発生しません。Android 4.1.2 を実行している Samsung Galaxy S3 と、Android 4.0.3 カスタム ROM を搭載した Galaxy S1 でテストしましたが、問題ありませんでした。

onKeyDownダイアログを閉じないようにするために、 、onKeyUponPrepareOptionsMenuおよび関連すると思われるその他のメソッドをオーバーライドしようとしましたが、どれも成功したり、貴重な情報をもたらしたりしませんでした。デバッガーがオーバーライドできるメソッドに到達する前にダイアログが消えたため、これらのメソッドにデバッグしようとしたときに同じことが起こりました。

ダイアログは、次の方法を使用して作成されます。

@Override
public Dialog onCreateDialog(final int pId) {
    Dialog dialog;
    switch (pId) {
        case LOADING_DIALOG:
            dialog = DialogCreator.createLoadingDialog(MyActivity.this));
            break;
        default:
            dialog = null;
    }
    super.onCreateDialog(pId);
    return dialog;
}

以下DialogCreatorを使用して AlertDialog を作成するだけです。

new AlertDialog.Builder(pContext).create();

ダイアログがキャンセルされないようにするために、次を追加しました。

alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setCancelable(false);

なぜこれがダイアログを閉じているのか誰にも分かりますか?

編集

「デスクトップ」にいる間、メニュー ボタンを長押しすると、Google 検索が開始されます。

4

1 に答える 1

3

@QQQestionsの回答は、この問題の解決に役立ちました。OnKeyListenerメニュー ボタンのロング クリック イベントをインターセプトするために使用する必要があります。

編集

if (keyCode == KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0) {
 return true; // Pretend we processed it
} else if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) {
 return true; // Pretend we processed it
}
于 2013-07-18T13:38:46.767 に答える