1

アクティビティ間でこれらのオブジェクトの ArrayList を渡すことができるように、Android で Parcelable クラスを作成しようとしています。私は、StackOverflow (http://stackoverflow.com/questions/6201311/how-to-read-write-a-boolean-when-implementing-the-parcelable-interface) とAndroid docs (http://developer.android.com/reference/android/os/Parcelable.html) ですが、必要な静的フィールド CREATOR でエラーが発生し続けます: フィールド CREATOR は static と宣言できません。静的フィールドは、静的または最上位の型でのみ宣言できます

クラスでこのエラーが発生し、Android ドキュメントから直接カット アンド ペーストされたクラスの例も表示されます。私が気づいていない私の状況に固有の何かがあるはずです....?? 私のクラスは以下のとおりです。何か案は?

ありがとう、

ブライアン

public class ComplaintType implements Parcelable
{
    // class data
    private int groupID = 0;
    private int id = 0;
    private String description = "";
    private boolean checked = false; // does this complaint type apply to this patient?

    // constructors
    public ComplaintType() {}       
    public ComplaintType(int _groupID, String desc, int _id, boolean ckd) {
        this.groupID = _groupID;
        this.description = desc; 
        this.id = _id;
        this.checked = ckd;}

    // getters/setters
    public int getGroupID() {return groupID;}
    public void setGroupID(int _groupID) { this.groupID = _groupID;}
    public String getDesc() {return description;}
    public void setDesc(String desc) {this.description = desc;}
    public int getID() {return id;}
    public void setID(int _id) {this.id = _id;}
    public boolean isChecked() {return checked;}
    public void setChecked(boolean ckd) {this.checked = ckd;}

    // utility functions
    public String toString() {return this.description;}
    public void toggleChecked() {checked = !checked;}

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(groupID);
        dest.writeInt(id);
        dest.writeString(description);
        dest.writeByte((byte) (checked ? 1 : 0));  // convert byte to a boolean (1=true, 0=false)
    }

    public static final Parcelable.Creator<ComplaintType> CREATOR // <-- ERROR OCCURS HERE
     = new Parcelable.Creator<ComplaintType>() {

        public ComplaintType createFromParcel(Parcel in){
            ComplaintType complaint = new ComplaintType();
            complaint.setGroupID(in.readInt());
            complaint.setID(in.readInt());
            complaint.setDesc(in.readString());
            complaint.setChecked(in.readByte() == 1);  // store the boolean as a byte (1=true, 0=false)
            return complaint;
        }

        @Override
        public ComplaintType[] newArray(int size) {             
            return new ComplaintType[size];
        }
    };

}
4

1 に答える 1

4

クラスが別のクラス内で非静的と宣言されているように聞こえます。これが、静的データ メンバーを持つことが許可されていない理由です。トップレベルのクラスにするか、静的に宣言してください。

于 2012-02-01T02:48:16.673 に答える