2012-04-21 90 views
16

我有一个tabhost与3个选项卡。在每个选项卡中都有一个Web视图。 当我点击一个标签时,webview需要“重新加载”,即使我以前在那里,它也没有被保存。 有什么办法可以保存webview?Android的webView saveState

回答

34

这可以通过在活动overrwriting的onSaveInstanceState(捆绑outState)和web视图调用saveState和处理:

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    webView.saveState(outState); 
} 

然后在你的onCreate恢复此web视图已重新充气课程后:

@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) 
} 

你可以参考这个LINK

+0

链接已损坏。 – 2017-10-06 04:47:25

1

另外,您可以考虑使用片段,您tabHost。当进入另一个webView你可以设置片段隐藏和其他显示。当你回到前一个片段时,内容不会被破坏。多数民众赞成我是如何做到这一点,它为我工作。

+0

对不起,我知道你的答案很久以前,但我想你可以帮我保存我的webView的状态。这是我的问题:http://stackoverflow.com/questions/26142255/retrieve-an-activity-after-time-out-warning-notification – Hamid 2014-10-02 13:27:36

+0

这不能保证。碎片如果停止,它们可以被销毁。 – William 2015-02-02 21:00:24

9

restoreState从来没有可靠的。并且到2015年文件接受事实。 (这一变化大概是在2014年左右的文件中做出的)。 这就是现在说的。

如果WebView中有机会建立国家 (载入网页,创建一个后退/前进列表等)有可能是 不良的副作用后,它被称为。请注意,此方法不再使用 还原此WebView的显示数据。从而

而对于saveState和()中的相应条目讲:

请注意,此方法不再存储的显示数据为 这个web视图。

你真的应该在onCreate方法里面做的是调用webView.loadUrl(),如果你想显示最近访问过的网址,请参阅本answer

如果你关心的WebView重装对取向变化等

你可以设置你的活动来处理的方向和keyboardHidden变化,然后就离开了的WebView单独