2016-02-07 13 views
3

基本上,我有一個TextView和兩個EditText意見在一個活動。從那個活動開始一個不同的活動。如果我按下設備上的硬件返回按鈕(結束第二個活動),視圖的狀態與以前相同,這很好。但是,在按下第二個活動的操作欄上的後退按鈕後,視圖會失去先前的狀態。Android不會自動保存查看狀態

根據文檔,如果您爲視圖(EditText,TextView等小部件)提供了一個ID,android會自動保存它們的狀態。

例如,EditText小部件保存用戶輸入的任何文本,CheckBox小部件會保存是否選中。唯一需要的工作是爲每個要保存其狀態的窗口小部件提供一個唯一的ID(帶有android:id屬性)。如果一個小部件沒有ID,那麼系統不能保存它的狀態。

我有一個唯一的ID爲每個視圖需要其狀態保存。我也曾嘗試明確使用XML中的android:saveEnabled="true"textView.setSaveEnabled(true);無濟於事。

我試過執行onSaveInstanceStateonRestoreInstanceState,並且爲這兩者調用super第一件事。按預期調用onSaveInstanceState,但從不調用onRestoreInstanceState。另外,savedInstanceState傳遞給onCreate始終是null

在清單中,我試過android:alwaysRetainTaskState="true"android:stateNotNeeded="false"沒有運氣。

我可以發佈代碼,但我不確定哪些代碼是相關的,因爲系統似乎沒有按照它應該做的。什麼可能導致視圖狀態不被android自動保存?任何幫助表示讚賞,如果需要,我可以發佈特定的代碼。

旁註:我使用AppCompat,如果它有任何區別。

+0

您希望保存的狀態是什麼?例如,「TextView」的文本將不會自動保存。 –

+0

你可能想看看這個問題:https://stackoverflow.com/questions/15569790/android-onsaveinstancestate-in-back-button –

+0

@RicardoLage'例如,EditText小部件保存用戶輸入的任何文本引用文檔。在我的情況EditText不是自動保存它的狀態,我甚至無法使用'onSaveInstanceState'等手動保存它。 –

回答

2

嘗試使用:

<activity 
     android:name=".MyActivity" 
     android:label="@string/activity_title" 
     android:launchMode="singleTop" 
     android:parentActivityName=".MyActivityParent"> 
    </activity> 

注意android:launchMode="singleTop"屬性。

默認情況下,當用戶按下後退按鈕時,會創建一個新的Intent,並且您的活動將從頭開始重新創建。以這種方式設置launchMode屬性告訴ART保留並重用您的活動實例。

+0

那很簡單。 –

+0

我已經遇到了這個問題。很高興幫助! –