인코딩의 Decoding

반응형

안드로이드에서 Intent에 객체를 넣어 전달하는 방법은

 

1. Serialize을 이용한 방법

 

[Android] Intent 사용하여 Activity 간 객체 정보 전달하기(Serialize)

Activity를 하나 추가한 후 Intent를 사용하여 Activity간 객체 정보를 전달해 보겠습니다. 1. Activity 하나 추가 2. activity_main.xml에 button 추가 3. activity_menu.xml에 버튼 추가 4. MainActivity 기..

androman.tistory.com

2. Parcelable 인터페이스를 이용하여 생성한 객체(class)를 전달하는 방법

 

두가지 방법이 있습니다. 이번 글에서는 Parcelable을 이용하는 방법을 알아보겠습니다.

 

1) Activity 하나 추가

왼쪽 상단 File -> new -> Activity -> Empty Activity 선택 후 Activity 하나 추가(이름은 MenuActivity 로 설정)

 

2) activity_main.xml에 button 추가

버튼 추가 text 속성을 "화면 띄우기"로 변경
button을 id를 통하여 조정할 것이므로 id(이 버튼의 id는 button)가 무엇인지 알아야한다.

3) activity_menu.xml에 버튼 추가

MenuActivity 화면에도 버튼 추가하고 text 속성을 "돌아가기"로 설정

4) Parcelable을 상속한 객체(class) 생성

java 폴더에서 오른쪽 마우스 클릭 -> new -> java Class
Name : DataObject(임의로) / Parcelable 인터페이스 상속

5) DataObject 객체 구현(DataObject.java)

 

6) MainActivity구현 (MainActivity.java)

7) MenuActivity 구현(MenuActivity.java)

실행 결과

화면 띄우기를 클릭하면 Intent가 MenuActivity를 호출하면서 객체 정보도 같이 전달한다.
MainActivity에서 전달받은 객체 정보가 Toast메세지로 표시

+(참고)

 

소스

 

DataObject.java

public class DataObject implements Parcelable {

  int index;
  String strVal;

  //생성자
  public DataObject(int index, String strVal) {
    this.index = index;
    this.strVal = strVal;
  }

  public DataObject(Parcel src){
    index = src.readInt();
    strVal = src.readString();
  }
  //CREATOR 라는 것을 생성해줘야함
  public static final Parcelable.Creator CREATOR = new Parcelable.Creator(){
    public DataObject createFromParcel(Parcel in){
      return new DataObject(in);
    }

    public DataObject[] newArray(int size){
      return new DataObject[size];
    }
  };
  //오른쪽 마우스 generate 메뉴에서 implement method에 있는 것들 override 하기
  @Override
  public int describeContents() {
    return 0;
  }

  @Override
  public void writeToParcel(Parcel parcel, int flag) {
    parcel.writeInt(index);
    parcel.writeString(strVal);
  }
}

MainActivity.java

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Button button = (Button) findViewById(R.id.button); // id로 버튼을 찾아 버튼 객체에 할당

    //onClick 메소드 추가
    button.setOnClickListener(new View.OnClickListener(){
      @Override
      public void onClick(View v){
        Intent intent = new Intent(getApplicationContext(), MenuActivity.class);
        //DataObject 객체 선언
        DataObject data = new DataObject(1,"data1");
        //putExtra를 사용하여 넘겨주기
        intent.putExtra("data",data);
        //Intent를 사용하여 Activity간 통신 start
        startActivityForResult(intent, 101);
      }
    });     //버튼에 대한 onClick 메소드
  }

}

MenuActivity.java

public class MenuActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_menu);

    Button button2 = (Button) findViewById(R.id.button2);

    button2.setOnClickListener(new View.OnClickListener(){
      @Override
      public void onClick(View v){
        finish();
      }
    });
    //getIntent로 intent 받기
    Intent passedIntent = getIntent();
    processIntent(passedIntent);
  }

  private void processIntent(Intent intent) {

    if (intent != null) {

      DataObject data = (DataObject) intent.getParcelableExtra("data");
      if (data != null) {
        //Toast로 DataObject에 있는 String 변수 띄우기
        Toast.makeText(getApplicationContext(), "전달받은 DataObject :" + data.strVal, Toast.LENGTH_LONG).show();
      }
    }
  }
}
반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band