2013-04-27 62 views
2

我需要在Bundle中存储两个SparseArray。Andriod Bundle with SparseArray <String>

所以在这里,它是:

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

检查这个答案: http://stackoverflow.com/questions/14899718/how-to-store-sparsearray-in-bundle – 2013-04-27 13:43:38

+0

所以我需要延长SparseArray 并实现Parcelable? – Davide 2013-04-27 17:36:11

+0

I'vre创建了'SparseArrayParcelable extends SparseArray implements Parcelable',但Eclipse说: '类型Bundle中的方法putSparseParcelableArray(String,SparseArray <?extends Parcelable>)不适用于参数(String,SparseArrayParcelable)' – Davide 2013-04-27 17:43:58

回答

2

在你的情况(其中SparseArray为String的),我想你不能使用方法(putSparseParcelableArray)。

只能用这种方法时,稀疏数组的对象类型实现Parcelable接口和String类没有实现这个

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

直到我们没有得到任何具体的解决方案,你可以做到这一点的时候, 同时节省了SparseArray,把这个数据在列表中,保存该列表outState包。

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

+0

我已经解决了实现反汇编/构建器方法,它们从SparseArray 中提取Keys int数组并将其传递给Bundle。 恢复时,builder()从keys数组构建SparseArray ;) – Davide 2013-04-29 14:55:50

相关问题