parcel에 class전달하기

Chance·2023년 5월 4일

int,String등등 단순 자료형 뿐만 아니라 parcelable을 통해 객체를 전달할 수도 있다.

MyClass.class

public class MyClass implements Parcelable {
    private String myString;
    private int myInt;
    private StudyResult myStudy;

    public MyClass(String myString, int myInt, StudyResult myStudy) {
        this.myString = myString;
        this.myInt = myInt;
        this.myStudy = myStudy;
    }

    protected MyClass(Parcel in) {
        myString = in.readString();
        myInt = in.readInt();
        myStudy = in.readParcelable(StudyResult.class.getClassLoader());
    }

    public static final Creator<MyClass> CREATOR = new Creator<MyClass>() {
        @Override
        public MyClass createFromParcel(Parcel in) {
            return new MyClass(in);
        }

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

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(myString);
        dest.writeInt(myInt);
        dest.writeParcelable(myStudy, flags);
    }

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

StudyResult.class

    public static class StudyResult implements Parcelable {
        private String subject;
        private int score;

        public StudyResult(String subject, int score) {
            this.subject = subject;
            this.score = score;
        }

        protected StudyResult(Parcel in) {
            subject = in.readString();
            score = in.readInt();
        }

        public static final Creator<StudyResult> CREATOR = new Creator<StudyResult>() {
            @Override
            public StudyResult createFromParcel(Parcel in) {
                return new StudyResult(in);
            }

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

        @Override
        public void writeToParcel(Parcel dest, int flags) {
            dest.writeString(subject);
            dest.writeInt(score);
        }

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

객체를 인텐트로 보내는 경우

Intent intent = new Intent(this , MyClass.class);
intent.putExtra("testInfo" , intent);
startActivity(intent);

객체 받기

Intent intent = new Intent();
MyClass myClass = intent.getParcelable("testInfo");

참고 코드

0개의 댓글