gpt4 book ai didi

android - 解码父 View SavedState 时恢复 View SavedState 抛出 ClassNotFoundException

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:47:05 28 4
gpt4 key购买 nike

我有 2 个类 ParentClassChildClass:

ParentClass 是 RelativeLayout 的子类,它使用以下代码使用 onSaveInstanceState()/onRestoreInstanceState() 保存状态:

@Override
protected Parcelable onSaveInstanceState() {
SavedState savedState = new SavedState(super.onSaveInstanceState());
savedState.someObj = someObj;
savedState.someInt = someInt;
savedState.someEnum = someEnum;
return savedState;
}

@Override
protected void onRestoreInstanceState(Parcelable in) {
if (!(in instanceof SavedState)) {
super.onRestoreInstanceState(in);
return;
}
SavedState savedState = (SavedState) in;
super.onRestoreInstanceState(savedState.getSuperState());
this.someObj = savedState.someObj;
this.someInt = savedState.someInt;
this.someEnum = savedState.someEnum;
}

这里是 SavedState 代码:

public static class SavedState extends BaseSavedState {

private SomeObj someObj;
private int someInt;
private SomeEnum someEnum;

public SavedState(Parcelable superState) {
super(superState);
}

public SavedState(Parcel source) {
super(source);
someInt = source.readInt();
someEnum = SomeEnum.values()[source.readInt()];
someObj = source.readParcelable(SomeObj.class.getClassLoader());
}

@Override
public void writeToParcel(@NonNull Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeInt(someInt);
dest.writeInt(someEnum.ordinal());
dest.writeParcelable(someObj, flags);
}

public static final Creator<SavedState> CREATOR = new Creator<SavedState>() {
public SavedState createFromParcel(Parcel in) {
return new SavedState(in);
}

public SavedState[] newArray(int size) {
return new SavedState[size];
}
};
}

没什么特别的,当我直接使用这个 View 时,一切都按预期工作(保存\恢复状态)。

然后我有 ChildClass 扩展 ParentClass 它还使用完全相同的代码保存它的状态,只是我只保存 long 和 int 字段。

当应用程序尝试通过使用 CREATORParcel 调用它的 SavedState 构造函数来恢复 ChildClass View 状态时使用以下堆栈崩溃:

Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.company.app.ParentClass$SavedState
1 android.os.Parcel.readParcelableCreator Parcel.java, line 2320
2 android.os.Parcel.readParcelable Parcel.java, line 2270
3 android.view.AbsSavedState.<init> AbsSavedState.java, line 57
4 android.view.View$BaseSavedState.<init> View.java, line 20128
5 com.company.app.ChildClass$SavedState.<init> ChildClass.java, line 151
6 com.company.app.ChildClass$SavedState$1.a ChildClass.java, line 166
7 com.company.app.ChildClass$SavedState$1.createFromParcel ChildClass.java, line 164

最佳答案

让你的SavedState类实现Parcelable

public static class SavedState extends Parcelable {

关于android - 解码父 View SavedState 时恢复 View SavedState 抛出 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29625545/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com