我有一个带有 3 个标签的标签主机。在每个选项卡中都有一个 webiview。当我单击一个选项卡时,即使我以前去过那里,webview 也需要“重新加载”,它还没有被保存。有什么办法可以保存 webview 吗?
问问题
26738 次
3 回答
45
这可以通过在您的活动中覆盖 onSaveInstanceState(Bundle outState) 并从 web 视图调用 saveState 来处理:
@Override
protected void onSaveInstanceState(Bundle outState) {
webView.saveState(outState);
super.onSaveInstanceState(outState);
}
然后在 webview 重新膨胀之后在你的 onCreate 中恢复它:
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.blah);
WebView webview = (WebView)findViewById(R.id.webview);
if (savedInstanceState != null)
webview.restoreState(savedInstanceState);
else
webview.loadUrl(URLData)
}
于 2012-04-21T12:13:43.103 回答
14
restoreState从不可靠。而到2015年的文件接受事实。(可能是在 2014 年左右对文件进行了更改)。这就是它现在所说的。
如果在此 WebView 有机会建立状态(加载页面、创建后退/前进列表等)之后调用它,则可能会产生不良副作用。请注意,此方法不再恢复此 WebView 的显示数据。
saveState() 的相应条目是这样说的:
请注意,此方法不再存储此 WebView 的显示数据。
在 onCreate 方法中你真正应该做的是调用 webView.loadUrl() 如果你想显示最后访问的 url,请看这个答案:
如果您担心 webview 在方向更改等时重新加载。
你可以设置你的活动来处理方向和键盘隐藏的变化,然后只留下 WebView
于 2015-09-30T13:38:01.487 回答
1
或者,您可以考虑将片段与您的 tabHost 一起使用。进入另一个 webView 时,您可以将片段设置为隐藏,另一个显示。当您返回上一个片段时,内容不会被破坏。我就是这样做的,它对我有用。
于 2013-10-09T11:26:55.970 回答