Android BaseSavedState实现中未调用writeToParcel()
在我的自定义视图中,我有:Android BaseSavedState实现中未调用writeToParcel(),android,android-custom-view,savestate,Android,Android Custom View,Savestate,在我的自定义视图中,我有: @Override public Parcelable onSaveInstanceState() { Parcelable superState = super.onSaveInstanceState(); return new SavedState(superState, mSomeBoolean); } @Override public void onRestoreInstanceState(Parcelable state) {
@Override
public Parcelable onSaveInstanceState() {
Parcelable superState = super.onSaveInstanceState();
return new SavedState(superState, mSomeBoolean);
}
@Override
public void onRestoreInstanceState(Parcelable state) {
final SavedState savedState = (SavedState) state;
super.onRestoreInstanceState(savedState.getSuperState());
this.mSomeBoolean = savedState.someBoolean;
}
MySavedState
实现了BaseSavedState
,问题是,writeToParcel(Parcel out,int flags)
似乎没有被调用,但奇怪的是,状态被正确保存
我不明白为什么会发生这种情况,更不明白的是,someBoolean
状态是如何保存的,尽管它没有写入packet
。任何帮助或指导都会有所帮助
更新: 以下是
SavedState
实现:
class SavedState extends View.BaseSavedState {
boolean someBoolean;
SavedState(Parcelable superState, boolean someBoolean){
super(superState);
this.someBoolean = someBoolean;
}
private SavedState(Parcel in) {
super(in);
this.someBoolean = (in.readInt() != 0);
}
@Override
public void writeToParcel(Parcel out, int flags) {
super.writeToParcel(out, flags);
out.writeInt(someBoolean ? 1 : 0);
}
public static final Parcelable.Creator<SavedState> CREATOR
= new Parcelable.Creator<SavedState>() {
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}
public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
类SavedState扩展View.BaseSavedState{
布尔;
SavedState(可包裹的超级状态,布尔值){
超级(超级国家);
this.someBoolean=someBoolean;
}
私有存储状态(包裹在中){
超级(in),;
this.someBoolean=(in.readInt()!=0);
}
@凌驾
公共无效写入包(包出,内部标志){
super.writeToParcel(输出,标志);
out.writeInt(someBoolean?1:0);
}
公共静态最终包裹。创建者
=新的Parcelable.Creator(){
public SavedState createFromParcel(中的地块){
返回新的SavedState(in);
}
public SavedState[]新数组(整数大小){
返回新的SavedState[大小];
}
};
}
问题在于,writeToParcel(Parcel out,int flags)似乎没有被调用
为什么要调用它?因为它是从onSaveInstanceState()返回的
,根据文档,视图使用返回的状态保存然后还原状态。在这里,我看不出与调用writeToParcel
的Parcelable
的常规实现的区别。我的意思是为什么应该调用writeToParcel?在这个答案中,作者实现了writeToParcel
如果不调用,为什么?告诉我?好的,您的SavedState
代码是什么?问题是,writeToParcel(Parcel out,int flags)似乎没有被调用
为什么要调用它?因为它是从onSaveInstanceState()返回的
,根据文档,视图使用返回的状态保存然后还原状态。在这里,我看不出与调用writeToParcel
的Parcelable
的常规实现的区别。我的意思是为什么应该调用writeToParcel?在这个答案中,作者实现了writeToParcel
如果不调用,为什么?接我?好的,您的SavedState
代码是什么?