【问题标题】:Android webView saveStateAndroid webView 保存状态
【发布时间】:2012-05-02 18:42:25
【问题描述】:

我有一个带有 3 个标签的标签主机。在每个选项卡中都有一个 webiview。 当我单击一个选项卡时,即使我以前去过那里,webview 也需要“重新加载”,它还没有被保存。 有什么办法可以保存 webview 吗?

【问题讨论】:

    标签: android webview save


    【解决方案1】:

    这可以通过在您的活动中覆盖 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)
    }
    

    【讨论】:

    • 链接已损坏。
    【解决方案2】:

    restoreState 从不可靠。而到2015年的文件接受事实。 (可能是在 2014 年左右对文件进行了更改)。 这就是它现在所说的。

    如果在这个 WebView 有机会建立状态之后调用它 (加载页面、创建后退/前进列表等)可能有 不良副作用。请注意,此方法不再 恢复此 WebView 的显示数据。

    saveState() 对应的条目是这样说的:

    请注意,此方法不再存储显示数据 这个 WebView。

    在 onCreate 方法中你真正应该做的是调用 webView.loadUrl() 如果你想显示最后访问的 url,请看这个answer

    如果您担心 webview 在方向更改等时重新加载。

    你可以设置你的 Activity 来处理方向和keyboardHidden的变化,然后就不用WebView了

    【讨论】:

      【解决方案3】:

      或者,您可以考虑在 tabHost 中使用片段。进入另一个 webView 时,您可以将片段设置为隐藏,另一个显示。当您返回上一个片段时,内容不会被破坏。我就是这样做的,它对我有用。

      【讨论】:

      • 对不起,我知道你的答案是很久以前的,但我想你可以帮助我保存我的 webView 的状态。这是我的问题:stackoverflow.com/questions/26142255/…
      • 不能保证。如果停止,碎片可以被销毁。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      • 2013-12-06
      • 2021-03-16
      • 2010-10-14
      • 1970-01-01
      相关资源
      最近更新 更多