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 回答