2012-06-07 348 views
23

我的應用程序 - 用的WebView活動是自動刷新,當屏幕旋轉和我的活動回到第1如何預防的WebView自動刷新,當屏幕旋轉

例如:處理的WebView 3活性(A,B,C)當我從A-> B或BC切換時,當屏幕旋轉時,它將回到A.

我的問題:我們如何保持活動活動事件屏幕旋轉?

回答

10

突出顯示@kirgy評論,如果您的API> 3.2,您必須將orientation|screenSize添加到您的清單中,否則在某些情況下它不會工作。

+3

不會,不會,不會。請允許您的配置在應該更新時更新。 –

+0

@NightlyNexus在webview中做這件事可能會產生什麼影響? –

+0

@cgomezmendez始終允許您的視圖恢復其狀態。是的,在這種情況下,WebView沒有保存和恢復的狀態,但是WebView是活動實例狀態的唯一部分?幾乎肯定不是。 –

47

有多種方法可以解決這個問題。

簡單的方法是將android:configChanges="orientation|screenSize"添加到清單中的相關Activity。通過設置此標誌,您可以告訴Android不要銷燬Activity,並且您將自己處理所有方向更改(如果有)。

更現代的方法是將WebView放入Fragment之內並使其保留其實例,使用setRetainInstance(true)標誌。主機Activity仍然會在定位更改中被破壞,但包含WebViewFragment將被簡單地分離並重新連接,而無需重新創建。您可以在API演示中找到此功能的an example。請記住,支持庫提供了與Honeycomb兼容的片段實現,因此不要被「常規」Fragment類的API級別所愚弄。

+2

您的第一個「最簡單」的方法是唯一的方法。在這種情況下,「更現代的方法」將不起作用(嗯,它會工作,但會泄漏內存),因爲WebView在實例化時綁定到Activity的上下文。查看[Dianne Hackborn對此的評論](https://groups.google.com/forum/#!msg/android-developers/cWnxkQ8RLeY/RA1n77EDeR8J)。 – mkuech

+0

@mkuech:後者是任何視圖的情況,而不僅僅是WebView - 這就是爲什麼你總是會發現自己在onCreateView()或onActivityCreated()的片段級別重新膨脹視圖。我在上面的回答中沒有詳細說明,但是通過'setRetainInstance(true)'你可以讓'old''WebView'將它的狀態保存到一個包中,然後恢復它。它確實意味着WebView將不得不重建其內容(請閱讀:重新加載url),因此它在視覺上不像手動處理Activity的配置更改那樣快速/平滑。 –

+2

但是你不需要使用'Fragment'來保存'WebView'的狀態。如果你需要的話,你可以使用'Activity'或'Fragment'中的標準狀態管理方法。對於這個簡單的用例,'s​​etRetainInstance(true)'不是正常需要的。它更多的是替代'onRetainNonConfigurationInstance',並且對於在配置更改中保持「線程」活躍的事情非常有用。我會避免複雜的事情。此外,由於僅保存一個WebView的狀態並不能防止重繪/重載,所以第一個解決方案是唯一能夠在旋轉時保持無縫的真正方法。 – mkuech

5

android:configChanges="orientation"添加到您的清單文件以防止在屏幕方向更改時重新啓動。

像::

<activity android:name=".MyActivity"  
    android:configChanges="orientation" 
    android:label="@string/app_name"> 

this一些參考。

+0

Dear Abhina8,非常感謝。它真的很大......我測試它對我來說工作得很好:)。 – SopheakVirak

+0

@SopheakVirak很樂意爲您效勞。 – Eight

+6

Android 3.2+(API 13)的註釋 - 從此版本開始,屏幕旋轉也會導致屏幕大小更改,從而刷新UI。您需要聲明「orientation | screenSize」而不是「orientation」。這一切都在@MH提出的上述Android文章中。 http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange – kirgy