我一直在尝试创建一个Android Parcelable对象,但一直遇到错误“内部类不能有静态声明”。作为参考,我一直在查看位于here的官方Android教程。
我目前的代码如下:
public class AppDetail implements Parcelable {
CharSequence label;
CharSequence name;
Drawable icon;
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeArray(new Object[] { this.label, this.name, this.icon });
}
public static final Parcelable.Creator<AppDetail> CREATOR
= new Parcelable.Creator<AppDetail>() {
public AppDetail createFromParcel(Parcel in) {
return new AppDetail(in);
}
public AppDetail[] newArray(int size) {
return new AppDetail[size];
}
};
public AppDetail() {}
public AppDetail(Parcel in) {
Object[] data = in.readArray(AppDetail.class.getClassLoader());
this.label = (String)data[0];
this.name = (String)data[1];
this.icon = (Drawable)data[2];
}
}
我发现其他人在网上遇到了类似的问题,并得出结论编译器不喜欢静态初始化程序块(而不是静态类本身) - 我尝试遵循这个建议并声明如下:public static Parcelable.Creator<AppDetail> CREATOR
和在其他地方初始化 - 但是我得到了同样的错误。
如何才能使这个/某些东西可以编译?
答案 0 :(得分:4)
是的 - 这是否应该重要?
是的,因为这就是你收到错误的原因。您的错误不是由Parcelable.Creator<AppDetail>
造成的,而是由于AppDetail
本身造成的。您不能在内部类中拥有static
方法或数据成员,例如CREATOR
。
这样做的结果是直接实现Parcelable
的类需要是static
内部类(即public static class AppDetail implements Parcelable
)或常规(非内部)Java类。
根据此实施方案,只需将AppDetail
设为public static class
即可解决您的问题。