0

今日、コードにonKeyDown()を入れたときにメニューが表示されないことに驚きました!!!

私のプロジェクトにはメニューがonCreateOptionsMenu()ありonOptionsItemSelected()、通常の方法でそれを設計しました。プロジェクトに問題はなく、正常に動作します。

問題は使用してonKeyDown()います。アクティビティに入れてプロジェクトを実行すると、メニューボタンをクリックしても何も表示されません。コメントアウトするonKeyDown()と、アプリは正常に動作します。

理由は何ですか?ありがとうございました

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);

    return (super.onCreateOptionsMenu(menu));
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle item selection
    switch (item.getItemId()) {
        case R.id.home:
            Log.i("Menu", "Home clicked.");
            return true;
        case R.id.social:
            Log.i("Menu", "Social Networks clicked.");
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}


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

    if(keyCode == KeyEvent.KEYCODE_HOME){
        Log.i("onKeyDown", "Home presed");
        int pid = android.os.Process.myPid(); 
        android.os.Process.killProcess(pid); 
    }

    if(keyCode == KeyEvent.KEYCODE_BACK){
        Log.i("onKeyDown", "back presed");
        int pid = android.os.Process.myPid(); 
        android.os.Process.killProcess(pid);
    }
    return true;
}
4

1 に答える 1

1

メソッドから値を返すとonKeyDown()、イベントが処理されたかどうかが示されます。あなたの場合true、あなたが本当にイベントに応答したかどうかに関係なく、常に返されます。メソッドの正しいバージョンは次のとおりです。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_HOME:
            //Handle the event
            return true;
        case KeyEvent.KEYCODE_BACK:
            //Handle the event
            return true;
    }

    return super.onKeyDown(keyCode, event);
}

また、ボタンのクリックでプロセスを強制終了することは、Androidでそのような処理を行う方法ではなく、代わりにアクティビティを管理する必要があります。戻るボタンはデフォルトでアクティビティを終了します。これはそのままにしておく必要があります。起動時にアクティビティを再開することはAndroidManifest.xmlで指定されています。

于 2012-02-23T08:33:06.487 に答える