Android Activity或者fragment中重写物理返回键,在h5页面中返回上一个界面

实现:Activity中放置webview,跳转到h5界面,点击返回键,不退出h5界面,而是返回上一个h5界面

 /**
     * 改写物理按键——返回的逻辑,希望浏览的网页后退而不是退出浏览器
     * @param keyCode
     * @param event
     * @return
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (webView.canGoBack()) {
                webView.goBack();//返回上一页面
                return true;
            }else {
            //System.exit(0);//退出程序
            //或者关闭当前界面
        }
        }
        return super.onKeyDown(keyCode, event);
    }

在Activity中可以很轻监听到onKeyDown事件,但大部分场景我们的操作是在Fragment中完成的,
此时要获取到onKeyDown事件需要多做点事
1.首先在Fragment的宿主Activity中重写onKeyDown方法
2.在Fragment中写一个方法,比如:onKeyDownChild(int keyCode, KeyEvent event)
3.在onKeyDown中获取到该Fragment的实例化对象,并调用onKeyDownChild(int keyCode, KeyEvent event)方法
将 keyCode, Event event作为参数传递过去,这样就可以在Fragment中获取到onKeyDown事件

代码如下:
宿主Activity

 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (fragmentsList != null && fragmentsList .size() >= 1) {
            Fragment fragment = fragmentsList .get(0);
            ((TextingFragment) fragment).onKeyDownChild(keyCode, event);
        }
        return super.onKeyDown(keyCode, event);
    }

Fragment

 public void onKeyDownChild(int keyCode, KeyEvent event) {
         if (keyCode == KeyEvent.KEYCODE_BACK) {
            if (webView.canGoBack()) {
                webView.goBack();//返回上一页面
                return true;
            }else {
            //System.exit(0);//退出程序
            //或者关闭当前界面
        }
 }

备注:如果在Fragment中弹出Dialog对话框时,通过onKeyDownChild方法获取不到事件,解决办法,
参考 https://www.jianshu.com/p/30b3ed6f0486

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值