Android项目点击系统菜单项失效

在Android项目中遇到点击系统菜单键无响应的问题,通过检查代码发现是由于在处理两次返回键退出应用的逻辑中,`onOptionsItemSelected`返回了`true`,导致菜单事件被消费。将此返回值改为`false`后,系统菜单的点击事件恢复正常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


      今天在做一个小的Android案例,需要使用系统菜单键来进行一些的相关的设置,但是吧,在小案例做完之后,发现系统菜单无论如何点击都没有效果(系统菜单列表不显示)。


     系统菜单的设置及点击事件的响应代码如下:(写出来是为了让大家看一下这一坨代码是没有问题的)

     

@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// 四个参数的含义:组,id编号,出现顺序,显示名称

		// 更换聊天背景的系统菜单按钮
		menu.add(1, 1, 1, "聊天背景");
		// 注销登陆的系统菜单
		menu.add(2, 2, 5, "退出");

		return super.onCreateOptionsMenu(menu);
	}

	// 菜单项的单击事件
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {

		// 1就是点击更改聊天背景按键
		case 1:
			// StartActivityForResult 启动一个新的Activity并得到它的回传值
			Intent intent = new Intent(ChatActivity.this,
					ChangeBgActivity.class);
			startActivityForResult(intent, 1994);
			break;

		// 2就是点击退出的按键
		case 2:
			//点击退出后,弹出提示框
			AlertDialog.Builder builder=new AlertDialog.Builder(ChatActivity.this);
			builder.setTitle("提示").setMessage("确定注销登陆?").setPositiveButton("确定",new DialogInterface.OnClickListener() {
				
				@Override
				public void onClick(DialogInterface dialog, int which) {
					// 注销当前登陆,返回到登陆界面(清除原偏好设置内的登陆信息)
					editor.putString("User", "null");
					editor.commit();
					
					Intent i=new Intent(ChatActivity.this,MainActivity.class);
					startActivity(i);
					finish();
					
				}
			}).setNegativeButton("取消", null).create().show();

			break;

		}
		return true;
	}

   然而吧,点击就是没有反应,也是醉了。。。

   后来呢,我又发现了它~一个隐藏的挺深的家伙:

   

//按两次返回键,退出登录
	private long lastTime=new Date().getTime();
	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		if (keyCode==KeyEvent.KEYCODE_BACK) {
			if (System.currentTimeMillis()-lastTime<1000) {
				finish();
			}else {
				lastTime=System.currentTimeMillis();
				Toast.makeText(ChatActivity.this, "再按一次返回键退出应用~", Toast.LENGTH_LONG).show();
			}
		}
		return true;
	}

    上面一段代码的用意大家都很明白的,无非就是设置两次返回键后退出 当前应用,关键就在于  return true ; 这句话上,它表示点击后把菜单键的点击事件消费掉,不再让其往上进行传递,而也就是在这里,阻止了系统菜单键的点击生效。


     于是乎,把两次返回键退出登录代码段中的返回值改为false后,系统菜单的点击事件也就可以正常的使用了。


     今天北京的天气非常的冷,一碗热热的鸡汤奉上。   任何的时候,都别轻易难过。该来的总会来,但是没有永远过不去的坎,只要你努力了,把自己变得更好,那其他的一切也就不用担心了,他们自然也会变得更好。 送给在寒冬中,依然努力奋斗的我们。

      

   

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值