android之Fragment中监听back回退事件


在谷歌官方推出NavigationView后,我们可以更方便的项目中使用一个Activity配合多个Fragment来实现多界面切换到效果,但是如果在Fragment中有跳转Fragment页面的问题时,点击返回键时需要返回时会有问题,因为Fragment默认是不接受返回按键的事件的,只有最外层的Activity会接受该事件,之前的做法一直是把所有的Fragment放到一个任务栈中,点击返回时依次调用栈中的Fragment显示,最近又有这样的需求的时候看到了以下这个方法直接在Fragment中拦截到了按键的返回的触发操作。

@Override

    public void onResume() {
        super.onResume();
        //得到Fragment的根布局并使该布局可以获得焦点
        getView().setFocusableInTouchMode(true);
        //得到Fragment的根布局并且使其获得焦点
        getView().requestFocus();
        //对该根布局View注册KeyListener的监听
        getView().setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                if (i == KeyEvent.KEYCODE_BACK && keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
                    Log.i("aaa", System.currentTimeMillis()+"");
                    if ((System.currentTimeMillis() - exitTime) > 2000) {
                        Toast.makeText(getActivity(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
                        //记录最后一次按键时间
                        exitTime = System.currentTimeMillis();
                    } else {
//                    这里是我做了保存数据操作
//                    BLEDeviceLab.get(getActivity()).saveDevices();
//                    mEditor.putString("ip", ipAddress);
//                    mEditor.commit();
                        getActivity().finish();
                        System.exit(0);
                    }
                    return true;
                }
                return false;
            }
        });
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值