TabActivity 返回键 onBackPressed 监听 dispatchKeyEvent 监听

TabActivity 返回键 onBackPressed 监听  dispatchKeyEvent 监听

早上碰到TabActivity 返回键的监听事件,出现各种问题。瞎忙了一早上,最后google兼看文档终于找到解决的办法。下面结合别人,解决办法:我们知道,在普通的Activity中可以重写onKeyDown(intkeyCode, KeyEventevent)方法对手机按键进行监听,而当要监听的Activity为TabActivity时(其实ListActivity也一样),这个方法并不起作用,因为这个TabActivity 是没有获取到焦点的,焦点在于TabActivity中的addTab进来的子Activity中其中一个,所以这个方法不起作用正在开发的应用的首页是一个TabActivity,当用户按下返回键时会退出程序,而这可能是用户无意而为之的,所以当用户按下返回键时要给一个提示。常规方法,像上文说的,重写onKeyDown(intkeyCode, KeyEventevent),根本不起作用;又发现SDK2.0以后新增了一个专门针对返回键的方法onBackPressed(),还是不起作用。google了很久,也没发现什么好的解决办法。只有自己动手了,打开SDK文档,仔细看了一下,发现有一个dispatchKeyEvent(KeyEventevent),一试果然管用,下面是一段示例代码,注意在if判断中要加一个event.getAction() ==KeyEvent.ACTION_DOWN判断,因为按键有两个事件ACTION_DOWNACTION_UP,也就是按下和松开,如果不加这个判断,代码会执行两遍,而在下面的代码中就是弹两次AlertDialog。

@Override
	public boolean dispatchKeyEvent(KeyEvent event) {
		if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN ) {
			// 需要监听的事件
			AlertDialog.Builder builder = new AlertDialog.Builder(
					MainActivity.this)
					.setIcon(R.drawable.logo)//设置图片
					.setTitle("提示")
					.setMessage("您是否要退出?");
					builder.setPositiveButton("确定",
							new OnClickListener() {
								public void onClick(DialogInterface dialog, int which) {
									MainActivity.this.finish();
									
								}
							});
					builder.setNegativeButton("取消",
							new OnClickListener() {

								public void onClick(DialogInterface dialog,
										int which) {
									dialog.cancel();
								}
							});
			builder.create().show();
			return false;
		}
		return super.dispatchKeyEvent(event);
	}
另外上面的代码中MainActivity.this.finish()后,其他在TabActivity中的addTab进来的子Activity们也都会被finish();

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值