带有SparseArray <String> </string>的Android Bundle

时间:2013-04-27 13:34:01

标签: android bundle

我需要在Bundle中存储两个SparseArray。

所以这是:

    protected void onSaveInstanceState(Bundle state) {
        super.onSaveInstanceState(state);

        state.putSparseParcelableArray("guybrushInsulti", (SparseArray<String>) gameEngine.getDialogs().getInsultKnow());
        state.putSparseParcelableArray("guybrushControInsulti",(SparseArray<String>) gameEngine.getDialogs().getControInsultKnow());
        state.putSerializable("level", gameEngine.getWorld().getLevel());   
}

Eclipse说:

The method putSparseParcelableArray(String, SparseArray<? extends Parcelable>) in the type Bundle is not applicable for the arguments (String, SparseArray<String>)

OnRestoreInstanceState:

 @Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);

    SparseArray<String> mInsultiKnow = savedInstanceState.getSparseParcelableArray("guybrushInsulti");
    SparseArray<String> mControInsultiKnow = savedInstanceState.getSparseParcelableArray("guybrushControInsulti");

        //Ripristino insulti
        gameEngine.getDialogs().loadControInsult(mLevel , true);
        gameEngine.getDialogs().loadInsult(mLevel, true, mInsultiKnow, mControInsultiKnow);
}

错误:

Bound mismatch: The generic method getSparseParcelableArray(String) of type Bundle is not applicable for the arguments (String). The inferred type String is not a valid substitute for the bounded parameter <T extends Parcelable>

我的问题是什么? :(

1 个答案:

答案 0 :(得分:2)

在你的情况下(SparseArray是String的地方),我认为你不能使用该方法(putSparseParcelableArray)。

此方法只能在Sparse Array的Object类型实现Parcelable接口时使用,而String类不实现此方法。

参考:http://developer.android.com/reference/java/lang/String.html

直到我们没有得到任何具体解决方案你才能做到这一点, 保存SparseArray时,将此数据放在列表中并将该列表保存为outState包。

在onRestoreInstanceState中,检索列表并再次将其转换为SparseArray。