2011-03-23 70 views

回答

167

片段沒有onRestoreInstanceState方法。

您可以在onActivityCreated中實現相同的結果,該結果接收具有保存的實例狀態(或null)的包。

檢查源代碼here

+68

這不是一個一致的設計,是嗎? – 2012-01-27 18:31:33

+4

這也不關心恢復片段嗎?它適用於配置更改,但如果你從一個片段開始一個活動,然後回到片段呢? – speedynomads 2013-06-04 16:41:20

+1

片段應該屬於開始的活動,所以如果保存在片段中,它會保存到父活動中。因此,如果您保留該片段(屬於某個活動)並返回片段,則會從父活動中恢復所有值 – Shaun 2013-12-05 03:16:08

21

在碎片指南的ListFragment example你可以找到:

@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    outState.putInt("curChoice", mCurCheckPosition); 
} 

您可以使用這樣的:

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    super.onActivityCreated(savedInstanceState); 
    if (savedInstanceState != null) { 
     // Restore last state for checked position. 
     mCurCheckPosition = savedInstanceState.getInt("curChoice", 0); 
    } 
} 

onActivityCreated()片段返回從堆棧回來之後被調用。

28

我知道,你已經接受的答案,但你應該閱讀official documentation about fragments,和它說(款「處理片段生命週期」):

您可以使用捆綁保留片段的狀態如果活動的進程被終止,並且您需要在重新創建活動時恢復片段狀態。您可以將片段的的onSaveInstanceState()回調過程中保存狀態,要麼的onCreate(),onCreateView(),或onActivityCreated()

所以在恢復它,您可以使用最適合你:onCreate()onCreateView(),或onActivityCreated()

5

onViewStateRestoredFragment相當於ActivityonRestoreInstanceState。但是在onActivityCreated(Bundle)之後和onStart()之前調用它。