android开发步步为营之22:处理Activity中的back按钮事件

        在手机应用中,用户点击回退按钮一般是返回上个页面,一般页面不用处理,如果在首页,点回退,没任何提示,就把应用给关了,这个用户体验就不太好了,所以一般都会给用户一个确认的提示:是否退出?免得用户误操作。
一、 Activity 中处理
    @Override
    public boolean onKeyDown( int keyCode, KeyEvent event) {
       // TODO Auto-generated method stub
       Toast.makeText( this , "onkeydown" , Toast. LENGTH_SHORT ).show();
       if (keyCode == KeyEvent. KEYCODE_BACK && event.getRepeatCount() == 0) {
           Toast.makeText( this , "onbackkeydown" , Toast. LENGTH_SHORT ).show();
         
           AlertDialog.Builder alertBuilder = new AlertDialog.Builder( this );
           alertBuilder.setTitle( " 提示信息 " ).setMessage(R.string. menu_exit_desc )
                  .setCancelable( false ).setPositiveButton(R.string. ok ,
                         new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                   int id) {
                               AActivity. this .finish();   
                               android.os.Process .killProcess(android.os.Process
                                              .myPid());
                            }
                         }).setNegativeButton(R.string. cancel ,
                         new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                   int id) {
                                dialog.cancel();
                            }
                         });
           return false ;
 
       }
 
       return super .onKeyDown(keyCode, event);
    }
   
   /*2.1开始有这个回退按钮事件,也可以放在这里处理
     Called when the activity has detected the user's press of the back key.
     The default implementation simply finishes the current activity,
     but you can override this to do whatever you want.
    */
    @Override
    public void onBackPressed() {
       // TODO Auto-generated method stub
       AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
       alertBuilder.setTitle("提示信息").setMessage("确认退出吗?")
              .setCancelable(false).setPositiveButton("确定",
                     new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog,
                                int id) {
                            MainActivity.this.finish();
                            android.os.Process
                                   .killProcess(android.os.Process
                                          .myPid());
                         }
                     }).setNegativeButton("取消",
                     new DialogInterface.OnClickListener() {
                         public void onClick(DialogInterface dialog,
                                int id) {
                            dialog.cancel();
                         }
                     });
       alertBuilder.show();
    }
 
二、 TabActivity 中处理
发现 TabActivity 中 OnKeyDown 时间没有被监听到,主要原因是当前 activity 的焦点放在了 tab 中的子 activity 中了,在 TabActivity 中得不到想要的焦点,所以按键操作并不起作用。
看了下 SDK 文档,发现有一个 dispatchKeyEvent(KeyEvent event) ,可以通过监听 event 操作,再判断是哪一个按键来实现对应的按键操作,注意在 if 判断中要加一个 event.getAction() == KeyEvent.ACTION_DOWN 判断。
@Override
    public boolean dispatchKeyEvent(KeyEvent event) {
       // TODO Auto-generated method stub
       Toast.makeText( this , "test1" , Toast. LENGTH_SHORT ).show();
       if (event.getAction() == KeyEvent. ACTION_DOWN && event.getKeyCode() == KeyEvent. KEYCODE_BACK )
       {
           AlertDialog.Builder alertBuilder = new AlertDialog.Builder( this );
           alertBuilder.setTitle( " 提示信息 " ).setMessage(R.string. menu_exit_desc )
                  .setCancelable( false ).setPositiveButton(R.string. ok ,
                         new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                   int id) {
                                HomeActivity. this .finish();
                                android.os.Process
                                       .killProcess(android.os.Process
                                              .myPid());
                            }
                         }).setNegativeButton(R.string. cancel ,
                         new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog,
                                   int id) {
                                dialog.cancel();
                            }
                         });
           alertBuilder.show();
           return false ;
 
       }
 
       return super .dispatchKeyEvent(event);
    }
三、效果
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值