0

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

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

到目前为止,我所拥有的是:

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

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

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

4

3 回答 3

2

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

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

WebView 的参考页面

当设备方向或任何其他配置发生变化时,Activity 的标准行为将被销毁并重新创建。这将导致 WebView 重新加载当前页面。如果你不想这样,你可以设置你的活动来处理方向和键盘隐藏的变化,然后只留下 WebView。它会根据需要自动重新定向。

更新

根据这个答案,我们应该使用

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

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

于 2012-08-24T13:18:20.677 回答
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);
}

链接:Android - 防止 WebView 在旋转时重新加载

于 2013-02-12T03:35:02.217 回答
0

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

于 2012-08-24T00:02:57.827 回答