문제

Following is my class:

public class Line implements Parcelable {
    private Point start, end;

    public Line() {
        // TODO Auto-generated constructor stub
    }

    public Line(Point start, Point end) {
        this.end = end;
        this.start = start;
    }

    public Point getStart() {
        return start;
    }

    public void setStart(Point start) {
        this.start = start;
    }

    public Point getEnd() {
        return end;
    }

    public void setEnd(Point end) {
        this.end = end;
    } 
    @Override
public void writeToParcel(Parcel dest, int flags) {
    // TODO Auto-generated method stub

}
}

it contains two Point(android.graphics.Point) objects and i would like to implement parcelable in it, so that I can restore ArrayList of Line objects in Activity.

The problem as both my attributes are of type Point not sure how to write it in writeToParcel and read it in

public Line(Parcel in) {
        super();

    }

EDIT

following the answer I implemented the Line class. But in activity the problem is onRestoreInstanceState is never getting called.

When I press home button, and get back to the app all the data in my arrayLists is lost.

    @Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    super.onSaveInstanceState(savedInstanceState);
    // Save UI state changes to the savedInstanceState.
    // This bundle will be passed to onCreate if the process is
    // killed and restarted.
    savedInstanceState.putInt("player", player);
    savedInstanceState.putParcelableArrayList("lines", lines);
    savedInstanceState.putParcelableArrayList("rects1", rects1);
    savedInstanceState.putParcelableArrayList("rects2", rects2);
    // etc.
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    super.onRestoreInstanceState(savedInstanceState);
    // Restore UI state from the savedInstanceState.
    // This bundle has also been passed to onCreate.
    player = savedInstanceState.getInt("player");
    lines = savedInstanceState.getParcelableArrayList("lines");
    rects1 = savedInstanceState.getParcelableArrayList("rects1");
    rects2 = savedInstanceState.getParcelableArrayList("rects2");
}
도움이 되었습니까?

해결책

try this...

public class Line implements Parcelable {
    private Point start, end;

    public Line() {
    }

    public Line(Point start, Point end) {
        this.end = end;
        this.start = start;
    }

    public Point getStart() {
        return start;
    }

    public void setStart(Point start) {
        this.start = start;
    }

    public Point getEnd() {
        return end;
    }

    public void setEnd(Point end) {
        this.end = end;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeParcelable(start, flags);
        dest.writeParcelable(end, flags);
    }

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

    public static final Parcelable.Creator<Line> CREATOR = new Parcelable.Creator<Line>() {

        @Override
        public Line createFromParcel(Parcel source) {
            Line line = new Line();
            Point start = source.readParcelable(Point.class.getClassLoader());
            Point end = source.readParcelable(Point.class.getClassLoader());
            line.setStart(start);
            line.setEnd(end);
            return line;
        }

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

다른 팁

Use My Answer. you need to write all the values in writeToParcel method. and create one Constructor and perform below steps.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top