안드로이드에서 Intent에 객체를 넣어 전달하는 방법은
2. Parcelable 인터페이스를 이용하여 생성한 객체(class)를 전달하는 방법
두가지 방법이 있습니다. 이번 글에서는 Parcelable을 이용하는 방법을 알아보겠습니다.
1) Activity 하나 추가
2) activity_main.xml에 button 추가
3) activity_menu.xml에 버튼 추가
4) Parcelable을 상속한 객체(class) 생성
5) DataObject 객체 구현(DataObject.java)
6) MainActivity구현 (MainActivity.java)
7) MenuActivity 구현(MenuActivity.java)
실행 결과
+(참고)
소스
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();
}
}
}
}
[Android] 안드로이드 Activity의 생명 주기 - (1) onCreate() (0) | 2020.01.29 |
---|---|
[Android] Activity의 개요 및 Activity의 생명 주기 소개 (0) | 2020.01.22 |
[Android] Intent 사용하여 Activity 간 객체 정보 전달하기(Serialize) (0) | 2020.01.18 |
안드로이드(Android) 어플 아이콘 이미지 변경하기 (0) | 2020.01.06 |
3. 안드로이드(Android) 웹 화면 띄우기 (0) | 2019.12.22 |