优雅的实现Fragment监听返回键

Activity可以通过重写onKeyDown(int keyCode, KeyEvent event),很容易的监听物理返回键事件,而Fragment并不能重写物理键监听事件。在一个Activity多个Fragment页面的应用中,很多时候有必要的监听每个Fragment返回事件,并对每个Fragment做特殊的数据处理。如果将每个Fragment的返回事件都在FragmentActivity中监听消费,那么其onBackPressed()的代码将会比较混乱;

Activity的onKeyDown

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {//按下返回键
            moveTaskToBack(false);//让程序进入后台但不销毁 这里写自己的逻辑代码就可以了
            return true;//消费了返回事件
        }
        return super.onKeyDown(keyCode, event);
    }
返回 true 表示已经消耗了返回的时间,返回false表示没有消耗,依旧会执行返回。

Fragment的onKeyDown

    @Override
    public void onResume() {
        super.onResume();
        getView().setFocusableInTouchMode(true);
        getView().requestFocus();
        getView().setOnKeyListener(new View.OnKeyListener() {
            @Override
            public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
                if (keyCode == KeyEvent.KEYCODE_BACK && keyEvent.getAction() == KeyEvent.ACTION_UP) {
                    //拦截到的返回事件
                    return true;
                }
                return false;
            }
        });
    }

getView返回的就是你的根布局view,setFocusable这个是用键盘是否能获得焦点,setFocusableInTouchMode这个是触摸是否能获得焦点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值