android开发——记下今天处理KeyDown和Menu事件所遇到的问题

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
		Intent intent = new Intent();
		if(keyCode==KeyEvent.KEYCODE_BACK){
                }
			
		return true;
	}

上面这段是对按键事件处理的程序

@Override
public boolean onCreateOptionsMenu(Menu menu) {

		// 获取当前的菜单
		MenuInflater inflater = getMenuInflater();
	    // 填充菜单
	    inflater.inflate(R.menu.menu, menu);
	    
		return true;
	}
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {

		int itemID=item.getItemId();
		switch(itemID){
		case R.id.single_circle:
			music_paly.setMode(true);
			displaytoast("切换到单曲循环模式",Toast.LENGTH_LONG);
			break;
		case R.id.order_circle:
			music_paly.setMode(false);
			displaytoast("切换到顺序播放模式",Toast.LENGTH_LONG);
			break;
		}
		return true;
		
	}
上面是对菜单按钮事件进行处理的程序

理论上来说,点击手机上的Menu键,会出现菜单选项,但是运行始终没有反应,Log日志显示:

11-05 06:56:11.932: W/KeyCharacterMap(1754): No keyboard for id 0
11-05 06:56:11.942: W/KeyCharacterMap(1754): Using default keymap: /system/usr/keychars/qwerty.kcm.bin

后来把代码OnkeyDown改成下面的,就OK了

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
		Intent intent = new Intent();
		if(keyCode==KeyEvent.KEYCODE_BACK){
                }
			
		return super.onKeyDown(keyCode, event);
	}

这是什么原因呢,我想应该是因为我一开始直接返回了一个true,因为Menu按键事件是属于OnkeyDown事件的,所以方法OnkeyDown事件肯定会优先响应了,因为最后直接返回了一个true给父类,所以默认是对Menu按键事件进行了响应并处理,便不会再去处理onCreateOptionsMenu方法和onOptionsItemSelected方法了;相反,返回的是super.onKeyDown(keyCode, event);因为没有对Menu事件做相应的响应和处理,相当于是返回了一个false,所以就会去执行onCreateOptionsMenu方法和onOptionsItemSelected方法,这两个方法了




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值