关于这个创建菜单的方法不调用的原因以及点击“搜索键”无法响应事件的原因经过一番的研究总算是知道原因了。
请看下面代码。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK)
{
Systen.out.println("这里仅仅是想做返回按钮的响应事件");
}
return true;//但是这里却必然返回了true【这就是其它机器上的按钮不响应的原因所在】
}
由于该方法中同时调用了onKeyDown方法。并且这个方法总是返回true。导致我的onCreateOptionsMenu方法和onCreateOptionsMenu方法不会被系统调用处理。
![]()
onKeyDown返回了true了也许就是告诉系统“按钮事件处理完毕了”这样以来系统就不会再继续处理按钮事件了。而创建菜单的那个方法恰恰就是一个等待处理的按钮事件。既然系统已经接到通知说按钮事件处理完了也就不去处理菜单了。。。
if(keyCode==KeyEvent.KEYCODE_BACK)
{
Systen.out.println("这里仅仅是想做返回按钮的响应事件");
}
return true;//但是这里却必然返回了true【这就是其它机器上的按钮不响应的原因所在】
}
由于该方法中同时调用了onKeyDown方法。并且这个方法总是返回true。导致我的onCreateOptionsMenu方法和onCreateOptionsMenu方法不会被系统调用处理。
onKeyDown返回了true了也许就是告诉系统“按钮事件处理完毕了”这样以来系统就不会再继续处理按钮事件了。而创建菜单的那个方法恰恰就是一个等待处理的按钮事件。既然系统已经接到通知说按钮事件处理完了也就不去处理菜单了。。。
修改的方案也很明了了。只要将onKeyDown返回true的地方限制一下,让它仅仅在点击了“返回按钮”的时候返回true其它时候返回false就行了。代码如下:
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK)
{
Systen.out.println("这里仅仅是想做返回按钮的响应事件");
if(keyCode==KeyEvent.KEYCODE_BACK)
{
Systen.out.println("这里仅仅是想做返回按钮的响应事件");
return true;//只有返回按钮才返回true
}
else
}
else
{
return false;//不是返回按钮则返回false;
}
}
}
