2

I need to store in a Bundle two SparseArray.

So here it is:

    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 says:

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);
}

Error:

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>

What's my problem? :(

4

1 回答 1

2

In your case (where the SparseArray is of String), i think you cannot use the method (putSparseParcelableArray).

This method can only be used when the Object type of the Sparse Array implements Parcelable interface, and String class doesn't implement this.

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

Till the time we don't get any concrete solution you can do this, While saving the SparseArray, put this data in the list and save that list the outState bundle.

And in onRestoreInstanceState, retrieve the list and convert it to the SparseArray again.

于 2013-04-28T08:12:35.420 回答