我需要在捆绑包中存储两个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>


我怎么了:(

最佳答案

在您的情况下(其中SparseArray是String),我认为您不能使用方法(putSparseParcelableArray)。

仅当稀疏数组的Object类型实现Parcelable接口而String类没有实现此方法时,才可以使用此方法。

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

直到我们没有任何具体的解决方案,您才能做到这一点,
保存SparseArray时,将此数据放入列表中,然后将该列表保存为outState捆绑包。

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

关于android - 带有SparseArray <String>的Android bundle ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16252748/

10-10 04:52