• Android 监听返回键退出程序的两种实现


    1、Android 双击返回键退出程序

        思路:用户按下返回键时设定一个定时器来监控是否2秒内实现了退出,如果用户没有接着按返回键,则清除第一次按返回键的效果,使程序还原到第一次按下返回键之前的状态。定时器是每次用户按下返回键才去创建。

    代码如下:

     

        /**
         * 菜单、返回键响应
         */
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            if(keyCode == KeyEvent.KEYCODE_BACK)
            {  
                exitBy2Click();        //调用双击退出函数
            }
            return false;
        }
        /**
         * 双击退出函数
         */
        private static Boolean isExit = false;
    
        private void exitBy2Click() {
            Timer tExit = null;
            if (isExit == false) {
                isExit = true; // 准备退出
                Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                tExit = new Timer();
                tExit.schedule(new TimerTask() {
                    @Override
                    public void run() {
                        isExit = false; // 取消退出
                    }
                }, 2000); // 如果2秒钟内没有按下返回键,则启动定时器取消掉刚才执行的任务
    
            } else {
                finish();
                System.exit(0);
            }
        }

     

    其中onKeyDown()函数可以在菜单栏Source->Override/Implement Methods里找到,双击即可自动添加到代码中。

    2、监听返回键,弹出一个退出对话框

    Android 如何监听返回键点击事件,并创建一个退出对话框,

    防止自己写的应用程序不小心点击退出键而直接退出。

    源码如下:

    /**监听对话框里面的button点击事件*/
    DialogInterface.OnClickListener listener = new DialogInterface.OnClickListener()
    {
            public void onClick(DialogInterface dialog, int which)
            {
                switch (which)
                {
                case AlertDialog.BUTTON_POSITIVE:// "确认"按钮退出程序
                    finish();
                    break;
                case AlertDialog.BUTTON_NEGATIVE:// "取消"第二个按钮取消对话框
                    break;
                default:
                    break;
                }
            }
    };    
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)
    {
            if (keyCode == KeyEvent.KEYCODE_BACK )
            {
    //            // 创建退出对话框
    //            AlertDialog isExit = new AlertDialog.Builder(this).create();
    //            // 设置对话框标题
    //            isExit.setTitle("系统提示");
    //            // 设置对话框消息
    //            isExit.setMessage("确定要退出吗");
    //            // 添加选择按钮并注册监听
    //            isExit.setPositiveButton("确定",null);
    //            isExit.setNegativeButton("取消", listener);
    //            // 显示对话框
    //            isExit.show();
                
                
                new AlertDialog.Builder(this)
                .setTitle("系统提示") 
                .setMessage("确定要退出吗")
                .setPositiveButton("确定", listener)
                .setNegativeButton("取消", listener)
                .show();
    
            }
            return false;
    }

     

  • 相关阅读:
    [Javascript] What is JavaScript Function Currying?
    [Javascript] Array methods in depth
    [ES6] ... spread operator
    [AngularJS] New in Angular 1.5 ng-animate-swap
    [Reduc] React Counter Example
    [Redux] Implementing Store from Scratch
    [Redux] Store Methods: getState(), dispatch(), and subscribe()
    [Redux] Introduction
    [Javascript] Intro to Recursion
    未来-区块链-Micron:区块链永远不会忘记:内存对这项革命性技术的推动作用
  • 原文地址:https://www.cnblogs.com/recock/p/4284429.html
Copyright © 2020-2023  润新知