TabActivity 返回键 onBackPressed 监听 dispatchKeyEvent 监听

本文介绍了解决TabActivity中返回键监听的问题。通过重写dispatchKeyEvent方法并添加ACTION_DOWN判断,实现了按下返回键时弹出确认对话框的功能。

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

早上碰到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_DOWN和ACTION_UP,也就是按下和松开,如果不加这个判断,代码会执行两遍,而在下面的代码中就是弹两次AlertDialog。

[java]  view plain copy
  1. @Override  
  2.     public boolean dispatchKeyEvent(KeyEvent event) {  
  3.         if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN ) {  
  4.             // 需要监听的事件  
  5.             AlertDialog.Builder builder = new AlertDialog.Builder(  
  6.                     MainActivity.this)  
  7.                     .setIcon(R.drawable.logo)<span style="font-size:14px;">//设置图片</span>  
  8.                     .setTitle("提示")  
  9.                     .setMessage("您是否要退出?");  
  10.                     builder.setPositiveButton("确定",  
  11.                             new OnClickListener() {  
  12.                                 public void onClick(DialogInterface dialog, int which) {  
  13.                                     MainActivity.this.finish();  
  14.                                       
  15.                                 }  
  16.                             });  
  17.                     builder.setNegativeButton("取消",  
  18.                             new OnClickListener() {  
  19.   
  20.                                 public void onClick(DialogInterface dialog,  
  21.                                         int which) {  
  22.                                     dialog.cancel();  
  23.                                 }  
  24.                             });  
  25.             builder.create().show();  
  26.             return false;  
  27.         }  
  28.         return super.dispatchKeyEvent(event);  
  29.     }  
另外上面的代码中MainActivity.this.finish()后,其他在TabActivity中的addTab进来的子Activity们也都会被finish ();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值