【发布时间】:2012-05-02 18:42:25
【问题描述】:
我有一个带有 3 个标签的标签主机。在每个选项卡中都有一个 webiview。 当我单击一个选项卡时,即使我以前去过那里,webview 也需要“重新加载”,它还没有被保存。 有什么办法可以保存 webview 吗?
【问题讨论】:
我有一个带有 3 个标签的标签主机。在每个选项卡中都有一个 webiview。 当我单击一个选项卡时,即使我以前去过那里,webview 也需要“重新加载”,它还没有被保存。 有什么办法可以保存 webview 吗?
【问题讨论】:
这可以通过在您的活动中覆盖 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)
}
【讨论】:
restoreState 从不可靠。而到2015年的文件接受事实。 (可能是在 2014 年左右对文件进行了更改)。 这就是它现在所说的。
如果在这个 WebView 有机会建立状态之后调用它 (加载页面、创建后退/前进列表等)可能有 不良副作用。请注意,此方法不再 恢复此 WebView 的显示数据。
saveState() 对应的条目是这样说的:
请注意,此方法不再存储显示数据 这个 WebView。
在 onCreate 方法中你真正应该做的是调用 webView.loadUrl() 如果你想显示最后访问的 url,请看这个answer:
如果您担心 webview 在方向更改等时重新加载。
你可以设置你的 Activity 来处理方向和keyboardHidden的变化,然后就不用WebView了
【讨论】:
或者,您可以考虑在 tabHost 中使用片段。进入另一个 webView 时,您可以将片段设置为隐藏,另一个显示。当您返回上一个片段时,内容不会被破坏。我就是这样做的,它对我有用。
【讨论】: