禁止WebView返回时刷新

webview在内部跳转的新的链接的时候,发现总会在返回的时候reload()一遍,但有时候我们希望保持上个状态。说好的
[TOC]可用生成目录呢?

1、两种解决办法,第一种方法

如果仅仅是简单的不更新数据,可以设置:

    mWeb.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ONLY);

2、第二种情况是从新new一个WebView

开发的时候有个需求
![](https://img-blog.csdn.net/20170518153724548?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZHNjMTE0/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast? =200x120)

点击更多之后返回就还原成加载更多之前的这张图片的状态了,
有人说部分浏览器都是从新new的webview,借鉴这种方法亲测可用:
布局里添加一个容器:

    <FrameLayout
        android:id="@+id/contentPanel"
        android:layout_below="@id/addBtn"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

然后java动态生成WebView,并且添加进去就可以了

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        contentPanel = (FrameLayout)findViewBy(R.id.contentPanel);
        addWeb(url);
    }

    private void addWeb(String url) {
        WebView mWeb = new WebView(MainActivity.this);
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        );
        mWeb.setLayoutParams(params);
        mWeb.setWebChromeClient(new WebChromeClient());
        mWeb.setWebViewClient(new MyWebViewClient());
        mWeb.getSettings().setJavaScriptEnabled(true);
        mWeb.loadUrl(url);
        webContentLayout.addView(mWeb);
    }

    //截获跳转
    private class MyWebViewClient extends WebViewClient{
        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            Log.i(TAG, "shouldOverrideUrlLoading: " + url);
            if (!urlList.contains(url)) {
                addWeb(url);
                urlList.add(url);
                return true;
            } else {
                return super.shouldOverrideUrlLoading(view, url);
            }
        }
    }

    //返回处理,和传统的mWeb.canGoBack()不一样了,而是直接remove
    @Override
    public void onBackPressed() {
        int childCount = webContentLayout.getChildCount();
        if (childCount > 1) {
            webContentLayout.removeViewAt(childCount - 1);
        } else {
            super.onBackPressed();
        }
    }
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值