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

Sop*_*rak 24 android android-webview

我的应用程序 - 当屏幕旋转和我的活动回到第一个时,WebView的活动自动刷新.

示例:当我从A-> B或BC切换时,WebView处理3活动(A,B,C),然后当屏幕旋转时它将返回到A.

我的问题:我们如何保持活动活动屏幕旋转?

MH.*_*MH. 48

解决这个问题的方法不止一种.

简单的方法是在清单中添加android:configChanges="orientation|screenSize"相关内容Activity.通过设置此标志,您可以告诉Android不要破坏该标志,Activity并且您将自己处理所有方向更改(如果有).

更现代的方法是使用标志将WebView内部设置为a Fragment并使其保留其实例setRetainInstance(true).托管Activity仍然会在方向更改时被销毁,但Fragment包含该文件WebView只会被分离并重新附加,而无需重新创建自己.您可以在API演示中找到此功能的示例.请记住,支持库提供了与Honeycomb兼容的片段实现,因此不要被"常规" Fragment类的API级别所欺骗 .

  • 你的第一个"最简单"的方法是唯一的方法."更现代的方法"在这种情况下不起作用(好吧,它会工作,但它会泄漏内存),因为WebView在实例化时与Activity的Context相关联.查看[Dianne Hackborn对此的评论](https://groups.google.com/forum/#!msg/android-developers/cWnxkQ8RLeY/RA1n77EDeR8J). (3认同)
  • 但是你不需要使用`Fragment`来保存`WebView`的状态.如果您需要,可以使用"Activity"或"Fragment"中的标准状态管理方法.对于这个简单的用例,`s​​etRetainInstance(true)`不是_normally_.它只是替换`onRetainNonConfigurationInstance`,对于在配置更改中保持`Thread`活动等方面非常有用.我会避免让事情复杂化.此外,由于仅仅保存"WebView"的状态不会阻止重绘/重新加载,因此第一种解决方案是在旋转时保持无缝的唯一真正方法. (2认同)

MSa*_*udi 10

突出显示@kirgy评论,orientation|screenSize如果您的API> 3.2,则必须添加 到您的清单中,在某些情况下,如果没有它,它将无法使用.

  • 不,不,不.请允许您的配置在何时更新. (5认同)

Eig*_*ght 5

添加android:configChanges="orientation"到清单文件以防止在屏幕方向更改时重新启动.

喜欢::

   <activity android:name=".MyActivity"     
    android:configChanges="orientation|screenSize"  
    android:label="@string/app_name">
Run Code Online (Sandbox Code Playgroud)

对一些参考.

  • 适用于Android 3.2+(API 13)的注释 - 从此版本开始,屏幕旋转也会导致屏幕尺寸更改,这将刷新UI.您需要声明"orientation | screenSize"而不仅仅是"orientation".这些都在@MH建议的上述Android文章中.http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange (7认同)