今天在做一个小的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后,系统菜单的点击事件也就可以正常的使用了。
今天北京的天气非常的冷,一碗热热的鸡汤奉上。 任何的时候,都别轻易难过。该来的总会来,但是没有永远过不去的坎,只要你努力了,把自己变得更好,那其他的一切也就不用担心了,他们自然也会变得更好。 送给在寒冬中,依然努力奋斗的我们。