2016-04-27 65 views
1

我正在使用Android应用程序并尝试在屏幕旋转时保存数据。我有一个名为mCheatedResults的数组中有这个数据。这是一对配对布尔数据和一个int的自定义对象。我为自定义对象创建类的代码是这样的:如何使用savedInstanceStateBundle包含Parcelable对象数组

private class Pair implements Parcelable{ 
    private int mIndex; 
    private boolean mCheated; 

    public Pair(int mIndex, boolean mCheated){ 
     this.mIndex=mIndex; 
     this.mCheated=mCheated; 
    } 
    public Pair(Parcel in){ 
     mIndex= in.readInt(); 
     mCheated=in.readByte()!=0; 
    } 
    public int describeContents() { 
     return 0; 
    } 
    public void writeToParcel(Parcel out, int flags){ 
     out.writeInt(mIndex); 
     out.writeByte((byte)(mCheated ? 1:0)); 
    } 
    public final Parcelable.Creator<Pair> CREATOR = new Parcelable.Creator<Pair>(){ 
     public Pair createFromParcel(Parcel in){ 
      return new Pair(in); 
     } 
     public Pair[] newArray(int size) { 
      return new Pair[size]; 
     } 
    }; 
    public int getIndex(){ 
     return mIndex; 
    } 
    public boolean didCheat(){ 
     return mCheated; 
    } 
    public void setBoolean(boolean mCheated) { 
     this.mCheated = mCheated; 
    } 
} 

我试图用它来对对象的数组附加到包的代码如下:

public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    Log.i(TAG, "onSaveInstanceState"); 
    savedInstanceState.putInt(KEY_INDEX, mCurrentIndex); 
    savedInstanceState.putParcelableArray(QUESTIONS_CHEATED, mCheatedResults); 
} 

我发现文件表明这会起作用,但似乎并不奏效。有什么建议么?

+1

您是否遇到编译错误,运行时异常或值未保存?什么是确切的问题? – Abdullah

+0

运行时或编译时没有错误。然而,该应用程序的行为不像数值已保存。 –

回答

0

直接从包中读取Parcelable数组将不起作用。例如:

Pair[] pairs = savedInstanceState.getParcelableArray(QUESTIONS_CHEATED); 

所以我这是怎么读Parcelable阵列:

Parcelable[] parcelables = savedInstanceState.getParcelableArray(QUESTIONS_CHEATED); 
Pair[] pairs = new Pair[parcelables.length]; 
for(int i = 0; i < parcelables.length; i++) { 
    pairs[i] = (Pair) parcelable[i]; 
} 

如果有人知道一个更好的办法,我想知道的请。

相关问题