8

在应用程序中,只要片段失去焦点(即在其上打开另一个活动/片段),就会onSaveInstanceState()调用它。

开发人员指南中也提到了这一点。

我正在尝试使用此方法在恢复片段时保持片段的状态。我的意图是在片段恢复时调用bundleonActivityCreated()

虽然onSaveInstanceState在片段失去焦点之前被调用。但是,当onActivityCreated()被调用时,它会接收Bundle savedInstanceState为 null。

如何从捆绑包中获取数据。

代码:

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    MyListAdapter adapter = new MyListAdapter(getActivity(),
            R.layout.my_row, titles, icons, this);

    setListAdapter(adapter);

    if (savedInstanceState != null) {
        // Never goes inside this condiiton.
        // Restore last state for checked position.
        mCurCheckPosition = savedInstanceState.getInt("curChoice", 0);
    }
}

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

1 回答 1

0

那么这意味着您的活动和片段只是暂停并且不必保存它们的实例状态(onSaveInstanceState()不一定被调用)。

如果您想确保onSaveInstanceState()被调用,请在设备的开发者设置中选择“不保留活动”。然后每次暂停活动时,系统都会将其杀死以强制调用onSaveInstanceState()(当然,除非您只是按回)

于 2013-10-18T20:24:11.680 回答