11

我有一个带有操作栏选项卡的活动。每个选项卡都包含一个片段。现在,当我旋转我的设备时,我相应片段中的捆绑包将变为空。当我使用 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() 不使用捆绑值调用。但是要处理这个。任何帮助将不胜感激。

4

2 回答 2

4

如果您使用 setRetainInstance(true) ,则在方向更改后,savedInstance 捆绑包始终为空。所以你不能用它来真正保存一些东西,但是如果你需要保存一些东西,你可以做的是把它放在片段的数据成员中,因为 setRetainInstance(true) 保留片段并且不会破坏它,所以在设备旋转了,您将获得相同的值。

于 2013-03-05T20:17:40.993 回答
3

尝试savedInstanceState进入. onCreate_ Fragment喜欢

  @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setRetainInstance(true);

        if (savedInstanceState != null) {
            // IT MUST NOT BE NULL HERE
        }
    }

请尝试...我希望它会工作

于 2012-12-11T09:55:28.597 回答