我需要在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>
我的问题是什么? :(
答案 0 :(得分:2)
在你的情况下(SparseArray是String的地方),我认为你不能使用该方法(putSparseParcelableArray)。
此方法只能在Sparse Array的Object类型实现Parcelable接口时使用,而String类不实现此方法。
参考:http://developer.android.com/reference/java/lang/String.html
直到我们没有得到任何具体解决方案你才能做到这一点, 保存SparseArray时,将此数据放在列表中并将该列表保存为outState包。
在onRestoreInstanceState中,检索列表并再次将其转换为SparseArray。