Android中使用Fragment时优雅处理返回键监听onBackPressed()

前言

项目中遇见这么一个需求在Fragment中监听返回键,点击返回键的时候做一些处理。
用户点击了返回键时 做一个 支付取消 的Toast 提示

如图:

1

在Fragment中代码实现

在Fragment的onResume() 的生命周期中做处理

 @Override
    public void onResume() {
        super.onResume();
        //Touch模式下不支持焦点,也能够获得焦点使用的
        Objects.requireNonNull(getView()).setFocusableInTouchMode(true);
        //获取当前view焦点
        getView().requestFocus();
        getView().setOnKeyListener((v, keyCode, event) -> {
        	//判断用户点击了手机自带的返回键
            if (event.getAction() == KeyEvent.ACTION_UP &&
             keyCode == KeyEvent.KEYCODE_BACK) {
            	//提示用户取消支付
                ToastUtils.showShort(getActivity(), R.string.cancel_pay);
                return true;
            }
            return false;
        });
    }

在Activity中返回键监听代码实现

 /**
     * 退出应用
     */
    private long clickTime = 0; //记录第一次点击的时间

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if ((System.currentTimeMillis() - clickTime) > 2000) {
                Toast.makeText(this, "再按一次退出程序", Toast.LENGTH_SHORT).show();
                clickTime = System.currentTimeMillis();
            } else {
                this.finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

与君共勉

我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天
1

猜你喜欢

转载自blog.csdn.net/Life_s/article/details/106138605
今日推荐