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();
}
}