0

フォームにオブジェクトがあります

public class Car implements Serializable, Parcelable {

    private static final long serialVersionUID = 1L;

    String name;
    String description;
    String brand;
    int speed;
    int brake;
    int asset;
    ArrayList<Uri> images;

    public Car(String name, String description, String brand, int speed,
            int brake, int asset, ArrayList<Uri> images) {
        super();
        this.name = name;
        this.description = description;
        this.brand = brand;
        this.speed = speed;
        this.brake = brake;
        this.asset = asset;
        this.images = images;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    public int getSpeed() {
        return speed;
    }

    public void setSpeed(int speed) {
        this.speed = speed;
    }

    public int getBrake() {
        return brake;
    }

    public void setBrake(int brake) {
        this.brake = brake;
    }

    public int getAsset() {
        return asset;
    }

    public void setAsset(int asset) {
        this.asset = asset;
    }

    public ArrayList<Uri> getImages() {
        return images;
    }

    public void setImages(ArrayList<Uri> images) {
        this.images = images;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + asset;
        result = prime * result + brake;
        result = prime * result + ((brand == null) ? 0 : brand.hashCode());
        result = prime * result
                + ((description == null) ? 0 : description.hashCode());
        result = prime * result + ((images == null) ? 0 : images.hashCode());
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        result = prime * result + speed;
        return result;
    }

    @Override
    public String toString() {
        return "Car [name=" + name + ", description=" + description
                + ", brand=" + brand + ", speed=" + speed + ", brake=" + brake
                + ", asset=" + asset + ", images=" + images + "]";
    }

    public int describeContents() {
        // TODO Auto-generated method stub
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags) {
        // TODO Auto-generated method stub

    }




}

しかし、私は実装する方法を理解していません

public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub

}

public int describeContents() {
    // TODO Auto-generated method stub
    return 0;
}

implements Parcelableクラスに追加した後にEclipseが必要としたもの

Androidサイトでは、サンプルはメソッドも示しています

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

クラス全体(およびArrayListとしてネストされたすべてのオブジェクト)を「パーセル可能」にする正しい方法は何ですか?

サンプルに続いて、コンストラクターに到着しました

public Car(Parcel in) {
   name= in.readString();
 description= in.readString();
speed=in.readInt();
...

images=in.readArrayList(??????????????????);
}

渡すクラスローダーは何readArrayList(..)ですか?

4

1 に答える 1

1

writeToParcelあなたがすべき方法について:

public void writeToParcel(Parcel dest, int flags) {
    dest.writeString(brand); //To write String
}

メソッドの引数destには、writeToParcel他のオブジェクトまたはraw型を書き込むための他の多くのメソッドがあります。オブジェクトに特定のメソッドを持たない他のオブジェクトを配置するには、書き込もうとしているオブジェクトが実装されている場合、または書き込もうとしているオブジェクトが実装されている場合はdest、メソッドを使用する必要があります。writeParcelableParcelablewriteSerializableSerializable

その後、Parceableオブジェクトを回復するときは、次を使用する必要があります。

private void readFromParcel(Parcel in) {
    brand = in.readString(); //To read String
}

書き込んだ順序と同じ順序で、inオブジェクトから値を読み取る必要があります。

コードの一部:

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

readFromParcelメソッドを呼び出すために必要です。上記のコードから呼び出されるコンストラクターをクラスに追加する必要があります。コンストラクターは次のようになります。

public Car(Parcel in) {
   readFromParcel(in);
}

メソッドについてはdescribeContents、Stackoverflowに関する良い答えがここにあります。

要約すると、私はこの方法が使用されたケースを見たことがありません。この方法は、パーセルの解析後にリソースを解放する場合に使用されますが、インターネット上でそれを説明する優れた資料は見つかりませんでした。0を返し続ける可能性があります。Androidのドキュメントはここにあります。

于 2012-10-17T23:05:45.063 に答える