数组中的数据不会保留

时间:2013-04-18 05:25:09

标签: android arrays orientation

在我的Android活动中,我使用两个不同的数组。首先,我声明它们,然后在onCreate()方法中,我实例化它们。但是,当我填充它们然后更改方向时,它们会再次被实例化,并且数据会丢失。

public class MainActivity extends Activity {

    private JSONArray first;
    private JSONArray second;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        interestedSections = new JSONArray();
        productsBought = new JSONArray();
    }

        //...
}

我在初始化数组之前尝试添加if (savedInstanceState != null),以便仅首次初始化它们,但是当我更改方向时,它们是null。为了在整个应用程序生命周期中将数据保存在数组中,我该怎么办?

3 个答案:

答案 0 :(得分:1)

检查此答案,因为旋转屏幕时会调用onCreate: Activity restart on rotation Android

编辑:如果你想要一个快速而又脏的方法来使它工作,只需要一个静态初始化的布尔值并将其设置为true onCreate。如果initialized为true,则不要将数组设置为新数组。

答案 1 :(得分:0)

我必须将数组声明为static,而在onCreate()方法中,我只是第一次初始化它们:

公共类MainActivity扩展了Activity {

private static JSONArray first;
private static JSONArray second;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    if (savedInstanceState == null) {
        first = new JSONArray();
        second = new JSONArray();
    }
}

    //...

}

答案 2 :(得分:0)

请参阅onSaveInstanceState(),这是您应该将阵列保存到捆绑包的位置。

顺便说一句,Android有时可以杀死进程并在以后恢复活动;静态变量不会存在。