Android webView中监听物理返回键一层一层退出
发布日期:2021-07-01 00:00:28 浏览次数:2 分类:技术文章

本文共 2578 字,大约阅读时间需要 8 分钟。

前言

fragment中加载webview如果不处理返回键

那么当你打开多个H5页面的时候 会一次性回退到根级

有时候我们需要一个缓冲 就是一级一级退出 给人一个良好的体验

该怎么做呢?
废话不多说 直接上代码

定义接口

定义一个接口 传入view

/** * Author      :Lyudony. * Created     :2021/2/10 * Description :定义接口 传入view *  */public interface BackHandledInterface  {    void setSelectedFragment(BackHandledFragment selectedFragment);    }

写一个基类Fragment

public abstract class BackHandledFragment extends BaseFragment {    private BackHandledInterface mBackHandledInterface;    /**     * 所有继承BackHandledFragment的子类都将在这个方法中实现物理Back键按下后的逻辑     * FragmentActivity捕捉到物理返回键点击事件后会首先询问Fragment是否消费该事件     * 如果没有Fragment消息时FragmentActivity自己才会消费该事件     */    public abstract boolean onBackPressed();    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        if (!(getActivity() instanceof BackHandledInterface)) {            throw new ClassCastException            ("Hosting Activity must implement BackHandledInterface");        } else {            this.mBackHandledInterface = (BackHandledInterface) getActivity();        }    }    @Override    public void onStart() {        super.onStart();        //告诉FragmentActivity,当前Fragment在栈顶        mBackHandledInterface.setSelectedFragment(this);    }}

MainActivity中处理 物理返回键

别忘了 让MainActivityimplements BackHandledInterface接口

//处理Fragment中的返回键    private BackHandledFragment mBackHandedFragment;    @Override    public void setSelectedFragment(BackHandledFragment selectedFragment) {        this.mBackHandedFragment = selectedFragment;    } @Override    public void onBackPressed() {        if (mBackHandedFragment == null || !mBackHandedFragment.onBackPressed()) {            if (getSupportFragmentManager().getBackStackEntryCount() == 0) {                if ((System.currentTimeMillis() - lastTime) > 2000) {                    lastTime = System.currentTimeMillis();                    ToastUtils.showShort(this, "再点击一次退出程序", Gravity.CENTER);                } else {                    super.onBackPressed();                }            } else {                getSupportFragmentManager().popBackStack(); //fragment 出栈            }        }    }

别忘了 让MainActivityimplements BackHandledInterface接口

最后 方法

在你使用的fragment中继承基类BackHandledFragment

然后重写父类抽象方法 onBackPressed()

判断

@Override    public boolean onBackPressed() {    	//如果webview有上一层 就返回上一层        if (mWebView.canGoBack()) {            mWebView.goBack();            return true;        } else {        	//交给父类            return false;        }    }

如此 便解决了Fragment中加载webview对物理返回键的监听

总结

现在是 2021 02 10 凌晨 2:29 明天就是除夕了

一个人在异乡 真的好孤单 : (
为了理想 努力吧!

转载地址:https://lvshichunqiu.blog.csdn.net/article/details/113778208 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Android中webview加载jsoup解析的HTML数据崩溃异常
下一篇:Android webView滑动实现沉浸式标题栏效果切换

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年05月04日 00时09分18秒