片段saveInstanceState在方向更改后变为null

时间:2012-12-11 07:02:11

标签: android android-fragments

我有一个带有操作栏标签的活动。每个选项卡包含一个片段。现在当我旋转我的设备时,我相应片段中的bundle将变为null。当我使用设备发布android 3.2时,这很小心,但它是在设备是Andoird3.0时发生的。在解决这个问题之后我很头疼。我在SO上检查了各种链接,但没有帮助。虽然我已经提供了足够的细节,但仍会提供一些代码片段,因为在各种情况下用户要求提供代码片段。

在我的片段类中,我存储了这个值

 @Override
    public void onSaveInstanceState(Bundle outState)
    {
        super.onSaveInstanceState(outState);
        outState.putBoolean("textboxVisible", true);
    }

这是存储一个布尔变量,它按如下方式重新检索。

/**
 * Function called after activity is created. Use this
 * method to restore the previous state of the fragment
 */
     @Override
public void onActivityCreated(Bundle savedInstanceState)
{
    super.onActivityCreated(savedInstanceState);
    if (savedInstanceState != null) 
    {
        //restore the state of the text box
        boolean textboxVisible = savedInstanceState.getBoolean("textboxVisible");
        if (textboxVisible) 
        {
            //do some stuff
        }                   
    }
}

但旋转后 savedInstanceState 将变为空。 我不是出了什么问题。我在一些文档中读到了3.2以下的onCreateView() 片段不会使用包值调用。但要解决这个问题。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:4)

如果使用setRetainInstance(true),在更改方向后,savedInstance包总是为null。所以你不能用它来保存一些东西,但如果你需要保存一些东西,你可以做的就是把它放在片段的数据成员中,因为setRetainInstance(true)保留片段并且不会破坏它,所以在旋转设备你将拥有相同的值。

答案 1 :(得分:3)

尝试获取savedInstanceState的{​​{1}}中的onCreate。 像

Fragment

请尝试...我希望它会起作用