如何防止屏幕旋转时WebView自动刷新

25

我的应用程序-使用WebView的活动在屏幕旋转并且回到第一个活动时会自动刷新。

例如:当我从A->B或B-C切换时,如果屏幕旋转,它将返回到A并刷新。

我的问题是:我们如何在屏幕旋转时保持活动状态?

3个回答

49

解决这个问题有多种方法。

简单的方法是在你的清单文件中的相关Activity上添加android:configChanges="orientation|screenSize"标志。通过设置此标志,您告诉Android不要销毁Activity并且您将自己处理所有方向更改(如果有)。

更现代的方法是将WebView放在一个Fragment中,并使用setRetainInstance(true)标志使其保留实例。主机Activity仍将在方向更改时被销毁,但包含WebViewFragment将被简单地分离和重新连接,而无需重新创建自身。您可以在API演示中找到这个功能的示例。请注意,支持库提供了一个面向Honeycomb以下版本的片段兼容实现,因此不要被“常规”Fragment类的API级别所迷惑。


3
您要做这件事的第一种“最简单”的方法是唯一可行的方法。 “更现代的方法”在这种情况下不起作用(它可能起作用,但会泄露内存),因为WebView在实例化时与Activity的Context相关联。请查看Dianne Hackborn关于此的评论 - mkuech
@mkuech:这种情况适用于任何视图,而不仅仅是WebView - 这就是为什么你总是会在onCreateView()onActivityCreated()中在片段级别重新填充视图。我在上面的答案中没有具体说明,但是使用setRetainInstance(true),您可以使“旧”的WebView将其状态保存到bundle并在之后恢复它。这意味着WebView将不得不重建其内容(即重新加载url),因此在视觉上不如手动处理Activity的配置更改快/流畅。 - MH.
2
但是您不需要使用“Fragment”来保存“WebView”的状态。如果只需要这些,您可以使用Activity或Fragment的标准状态管理方法。对于这种简单的用例,通常不需要使用“setRetainInstance(true)”。它更多地替换了“onRetainNonConfigurationInstance”,并且对于保持跨配置更改活动的“Thread”等内容非常有用。我建议避免使事情变得复杂。此外,由于仅保存“WebView”的状态无法防止其重新绘制/重新加载,因此第一种解决方案是保持旋转时无缝的唯一真正方法。 - mkuech
你真棒。这是目前为止最好的解决方案。 - zackygaurav
@mkuench,你提出了非常重要的观点并提供了优秀的来源。你应该得到比你现在更多的赞。谢谢! - Lv99Zubat
这对我不起作用,Web视图一直在重新加载。 - Roel

10

强调 @kirgy 的评论,如果你的 API > 3.2 ,你需要在你的清单文件中添加 orientation|screenSize ,否则在某些情况下它不起作用。


5
不行,不行,不行。请允许您的配置在应该更新时进行更新。 - Eric Cochran
@NightlyNexus 在 webview 中这样做可能会有什么影响? - Chris Gomez
@cgomezmendez 永远允许你的视图恢复它们的状态。是的,在这种情况下,WebView没有状态需要保存和恢复,但是WebView是否只是你的Activity实例状态的一部分?几乎肯定不是。 - Eric Cochran

6
在您的清单文件中添加android:configChanges="orientation",以防止屏幕方向更改时重新启动。
   <activity android:name=".MyActivity"     
    android:configChanges="orientation|screenSize"  
    android:label="@string/app_name">

参考这里了解一些相关信息。


亲爱的 Abhina8,非常感谢..真的很好..我测试了,对我来说运行得非常好 :). - SopheakVirak
7
自Android 3.2+(API 13)起,屏幕旋转也会导致屏幕尺寸的变化,从而刷新UI界面。您需要声明“orientation|screenSize”而不仅仅是“orientation”。这些都在上面由@MH提供的Android文章中建议。http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange - kirgy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接