2011-12-29 161 views
2

我是android.i的新手,有activitymain.xml文件。現在,我有一個scroll view在那main.xml file.when我運行我的應用程序在portrait mode和當我去scroll view的底部和當我更改我的application state到橫向模式比我去滾動視圖的頂部。這意味着當我們在portraitlandscape之間切換時,反之亦然,activity被召回。因此需要將應用程序狀態保存在portrait中,並在landscape中恢復。所以它的任何解決方案? 由於事先 阿米爾·罕一如何保存活動狀態

+0

你有看過這個http://stackoverflow.com/questions/2308628/how-do-you-save-your-activitys-state-when-exiting-android – rfsk2010 2011-12-29 12:35:34

回答

3
重建

該文檔做了一個體面的工作explaining different ways to handle configuration changes,包括屏幕方向更改。正如@Jason Kuang所提到的那樣,這些方法中的一種有助於保存UI的臨時狀態,它將數據保存在onSavedInstanceState()方法中。

通常,您可以依靠Android來保存和恢復View的狀態,而無需您做任何特別的努力。爲protected方法onSaveInstanceState()的源代碼解釋(強調):

默認實現通過調用android.view.View.onSaveInstanceState()每個需要照顧的大多數UI每個實例的狀態對你的在具有ID的層次結構中查看,並通過保存當前聚焦視圖的ID(所有這些視圖都通過onRestoreInstanceState(android.os.Bundle)的默認實現來恢復)。如果您重寫此方法以保存未被每個視圖捕獲的附加信息,那麼您可能需要調用默認實現,否則應準備好保存每個視圖的所有狀態。

這是一個有點欺騙性,因爲API文檔指出EditText S和TextView小號必須android:freezesText="true"在佈局XML文件中明確宣佈他們,以確保當調用onSaveInstanceState()是Android的自動保存其狀態。我最近沒有測試過這個,但它是源代碼似乎在做的事情。因此,處理臨時UI狀態是最好的。

另一條提示:您可以通過致電setSaveEnabled(false)對該View明確阻止存儲臨時數據的View。 (這不會影響它的孩子。)

通常,手動保存屏幕狀態到onPause()方法和onSaveInstanceState()是一個好主意。

+0

一位同事告訴我,什麼API doc說關於需要自動保存的EditText和TextView需要顯式啓用 - 就像我上面提到的 - 事實上並非如此。我想測試總是一個很好的策略,以確保文檔所說的是最新的。 @AamirPathan,你想接受你認爲最有用和最準確的答案嗎? – hotshot309 2012-01-23 16:41:58