模仿QQ退出菜单,单击返回键出现对话框,双击返回键退出程序。

单击的时候出现对话框,重写activity的按钮监听方法即可。

@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_BACK){
            getexitdialog().show();
            Log.i("111","1111");
        }
        return  true;
    }

问题存在于,在显示对话框的时候aitivity的监听是无效的(事件传递到对话框了),所以还得监听对话框的按钮事件。但是首次启动对话框由于传递(已经将返回值改成了true,依然传递了,原因不明)会让对话框也会产生一次监听到返回键的事件,于是加上一个首次进入的标识符。

<strong>对话框源<span style="font-family: Arial, Helvetica, sans-serif; font-size: 12px;">码如下:</span></strong>

 private AlertDialog getexitdialog(){
        AlertDialog.Builder builder= new AlertDialog.Builder(this);//创建buider
        builder.setIcon(R.drawable.suer);//设置图片
        builder.setTitle("提示");//设置标题
        builder.setCancelable(false);//禁止其他退出方式
        builder.setMessage("您真的要退出吗?");//设置信息内容
        builder.setOnKeyListener(new DialogInterface.OnKeyListener() {//监听按钮,第一次按返回键将isfirst改为false,第二次退出
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if(keyCode==KeyEvent.KEYCODE_BACK&&!isfirst){

                    finish();
                }
                if(keyCode==KeyEvent.KEYCODE_BACK)isfirst=false;
                return true;
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {//取消按钮,点击对话框又点了取消重置isfirst的值
            @Override
            public void onClick(DialogInterface dialog, int which) {
                isfirst=true;
            }
        });

        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {//确定按钮,退出程序
            @Override
            public void onClick(DialogInterface dialog, int which) {
                finish();
            }
        });
        return  builder.create();
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值