Android - WebView(保存Bundle以避免在屏幕旋转时丢失数据)

时间:2012-08-23 22:53:45

标签: java android rotation android-mapview bundle

所以我理解当我旋转屏幕时,内容将被设置回原来的状态,因为活动是为新布局创建和销毁的。

这对我来说是个问题,因为我在WebView中显示的网络应用程序向用户显示唯一信息,当他们将手机侧向转动时数据丢失。现在,我知道我必须覆盖的两种方法,但我不完全确定我可以在onSaveInstanceState中放置什么来复活具有完全相同数据的确切页面。我会尝试存储URL并使用它,但页面使用随机功能,因此它会有所不同。

到目前为止我只有:

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
}

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

有关如何实现这一目标的任何想法?

3 个答案:

答案 0 :(得分:2)

如果您只是通过将清单中的条目修改为类似于以下内容而使您的活动不在配置更改期间重新启动,则可能会更简单:

    <activity android:name=".MyActivity"
        android:configChanges="orientation|keyboardHidden" />

来自reference page for WebView

  

当设备方向或任何其他配置更改时,将销毁并重新创建活动的标准行为。这将导致WebView重新加载当前页面。如果您不想这样,可以将Activity设置为处理方向和keyboardHidden更改,然后单独保留WebView。它会在适当的时候自动重新定位。

<强>更新

根据this answer,我们应该使用

    <activity android:name=".MyActivity"
        android:configChanges="orientation|screenSize" />

代替具有Honeycomb及以上版本的设备。请试一试:)

答案 1 :(得分:1)

和我一起尝试这项工作

    if (savedInstanceState == null)
{
  web.loadUrl(webURL);
}

添加方法

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

@Override
protected void onRestoreInstanceState(Bundle savedInstanceState)
{
super.onSaveInstanceState(savedInstanceState);
web.restoreState(savedInstanceState);
}

link:Android - Preventing WebView reload on Rotate

答案 2 :(得分:0)

据我了解,您的问题在于Web应用程序,而不是Android客户端实现。 如果存储URL不够,则必须找到另一种方法将这些“随机数据”发送到主机应用程序,可能是通过cookie或javascript变量。