Android禁止WebView返回时刷新

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yushuangping/article/details/84957237

最近做一个Android项目所有页面全部是h5,返回时不希望刷新页面,首页,团队,收益,我的 ,是在一个html里面  在浏览器中打开如下图所示:

期望是:点“我的”再点“设置”,进入设置页面,然后点返回,应该停留在“我的”

我通过webview.goback()方法进行返回

实际结果是:却停留在“首页”位置:

(1)点“我的”:

(2)点“设置”:

 (3)点“返回”:

通过在网上一番查找,原来webview.goback()会从新刷新页面,所以会停留在“首页”位置

通过下面的方法可以解决这一问题:

1.在布局里添加一个容器:

 <FrameLayout
        android:id="@+id/framelayout_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

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

public class MainActivity extends AppCompatActivity {
    private FrameLayout contentPanel;
    private List<String> urlList = new ArrayList<>();
    private int childCount = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        contentPanel = findViewById(R.id.framelayout_main);
        addWeb(url);
    }
  /**
     * 添加webview
     *
     * @param url
     */
    private void addWeb(String url) {
        WebView mWeb = new WebView(MainActivity.this);
        mWeb.getSettings().setJavaScriptEnabled(true);
        mWeb.getSettings().setDomStorageEnabled(true);//开启dom缓存就好了,显示弹框
        mWeb.setWebChromeClient(new WebChromeClient());
        mWeb.setWebViewClient(new MyWebViewClient());        mWeb.loadUrl(url);
        contentPanel.addView(mWeb);
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
        );
        mWeb.setLayoutParams(params);
    }
  //截获跳转
    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() {
        childCount = contentPanel.getChildCount();
        if (childCount > 1) {
            contentPanel.removeViewAt(childCount - 1);
            urlList.remove(urlList.size() - 1);
        } else {
            super.onBackPressed();
        }

    }
}

猜你喜欢

转载自blog.csdn.net/yushuangping/article/details/84957237