Android Parcelable类 - 内部类不能有静态声明

时间:2015-04-16 22:51:35

标签: java android parcelable

我一直在尝试创建一个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和在其他地方初始化 - 但是我得到了同样的错误。

如何才能使这个/某些东西可以编译?

1 个答案:

答案 0 :(得分:4)

  

是的 - 这是否应该重要?

是的,因为这就是你收到错误的原因。您的错误不是由Parcelable.Creator<AppDetail>造成的,而是由于AppDetail本身造成的。您不能在内部类中拥有static方法或数据成员,例如CREATOR

这样做的结果是直接实现Parcelable的类需要是static内部类(即public static class AppDetail implements Parcelable)或常规(非内部)Java类。

根据此实施方案,只需将AppDetail设为public static class即可解决您的问题。