2013-04-27 58 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

相關問題