티스토리 뷰

1. 액티비티 A에서는 인텐트 객체를 만들고 put...메소드를 이용해 부가데이터를 넣어준다.

2. startActivityForResult 메소드를 호출한다.

3. 액티비티 B가 실행된 후 setResult 메소드를 호출하면서 인텐트를 전달하고 finish 메소드를 호출하면 액티비티 A로 돌아온다.

4. 액티비티 B에서도 인텐트 안에 부가데이터를 넣어 전달할 수 있는데 이 인텐트는 액티비티 A의 onActivityResult 메소드가 호출되면서 전달받을 수 있다.

 

 

ArrayList로 구현한 부분 -> Serializable 이용

SimpleData로 구현한 부분 ->Parceable 이용

 

 

 

SimpleData.java

package com.example.myparcelable;

import android.os.Parcel;
import android.os.Parcelable;

public class SimpleData implements Parcelable {

    int number;
    String message;

    public SimpleData(int number, String message) {
        this.number = number;
        this.message = message;
    }

    public SimpleData(Parcel src){
        number = src.readInt();
        message = src.readString();
    }

    public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){
        public SimpleData createFromParcel(Parcel src){
            return new SimpleData(src);
        }

        public SimpleData[] newArray(int size){
            return new SimpleData[size];
        }
    };

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

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

Parcelable 사용하면 저 CREATOR 라는걸 만들어줘야되는데

이유는 모르겠고 그래야하는듯!

 

+

플래그 : 인텐트에 추가할 수 있는 옵션

- 인텐트 객체의 addFlags 메소드를 이용해 설정할 수 있으며 여러 개의 플래그를 | 기호로 붙여 한꺼번에 설정 가능

 

ex)

Intent.FLAG_ACTIVITY_SINGLE_TOP : 동일한 액티비티가 이미 메모리에 만들어져 있다면 추가로 만들지 않고 그 액티비티를 화면에 띄워주는 역할

Intent.FLAG_ACTIVITY_NEW_TASK : 액티비티들을 관리하는 태스크(TASK) 객체를 새로 만든다. 브로드캐스트 수신자나 서비스는 화면이 없기 때문에 새로운 화면을 띄워주려면 먼저 태스트 객체가 만들어져야 한다.

Intent:FLAG_ACTIVITY_CLEAR_TOP : 원하는 액티비티가 이미 메모리에 만들어져 있고 그 이후에 다른 액티비티가 만들어진 경우 원하는 액티비티를 찾아 다시 띄울 때 그 이후에 만들어진 다른 액티비티들은 없애주는 역할

 

* 액티비티 스택(Activity Stack)에서 액티비티가 관리된다는 점을 이해해야함

 

댓글