今天,当我在代码中放入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;
}
从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中指定的。