2011-03-23 68 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()之前调用它。