Android 에 서 는 Intent 를 사용 하여 Activity 간 에 대상 을 전달 하 는 방법(Serializable 또는 Parcelable 사용)

Android 의 서로 다른 Activity 간 전달 대상 은 Bundle.putSerializable(Key,Object)을 사용 하 는 것 을 고려 할 수 있 습 니 다.Bundle.putParcelable(Key,Object)을 사용 하 는 것 도 고려 할 수 있 습 니 다.그 중에서 앞의 방법 중의 Object 는 Serializable 인 터 페 이 스 를 실현 하고,뒤의 방법 중의 Object 는 Parcelable 인 터 페 이 스 를 실현 해 야 한다.다음은 완전한 예 로 설명 하 겠 습 니 다.
1.안 드 로 이 드 프로젝트 를 새로 만 듭 니 다.이 프로젝트 의 디 렉 터 리 구 조 는 다음 그림 과 같 습 니 다.

2.main.xml 레이아웃 파일 을 수정 합 니 다.레이아웃 파일 의 원본 코드 는 다음 과 같 습 니 다:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<TextView 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="@string/hello" 
/> 
<Button 
android:id="@+id/serButton" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Serializable"/> 
<Button 
android:id="@+id/parButton" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:text="Parcelable"/> 
</LinearLayout> 
3.프로젝트 의 src 디 렉 터 리 에 실체 패 키 지 를 새로 만 듭 니 다.com.andy.entity 라 고 명명 합 니 다.이 패키지 에 두 개의 실체 클래스 를 추가 합 니 다.하 나 는 Person.java 입 니 다.이 패 키 지 는 Serializable 인 터 페 이 스 를 실현 합 니 다.하 나 는 Police.java 입 니 다.이 종 류 는 Parcelable 인 터 페 이 스 를 실현 합 니 다.코드 는 다음 과 같 습 니 다.

Person.java:
package com.andy.entity; 
import java.io.Serializable; 
public class Person implements Serializable { 
private static final long serialVersionUID = -6919461967497580385L; 
private String name; 
private int age; 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
public int getAge() { 
return age; 
} 
public void setAge(int age) { 
this.age = age; 
} 
} 
Police.java:
[c-sharp] view plain copy
package com.andy.entity; 
import android.os.Parcel; 
import android.os.Parcelable; 
public class Police implements Parcelable { 
private String name; 
private int workTime; 
public String getName() { 
return name; 
} 
public void setName(String name) { 
this.name = name; 
} 
public int getWorkTime() { 
return workTime; 
} 
public void setWorkTime(int workTime) { 
this.workTime = workTime; 
} 
public static final Parcelable.Creator<Police> CREATOR = new Creator<Police>() { 
@Override 
public Police createFromParcel(Parcel source) { 
Police police = new Police(); 
police.name = source.readString(); 
police.workTime = source.readInt(); 
return police; 
} 
@Override 
public Police[] newArray(int size) { 
return new Police[size]; 
} 
}; 
@Override 
public int describeContents() { 
return 0; 
} 
@Override 
public void writeToParcel(Parcel parcel, int flags) { 
parcel.writeString(name); 
parcel.writeInt(workTime); 
} 
}
4.패키지 com.andy.testdemo 에서 TestActivity.java 클래스 를 수정 하고 이 패키지 에 클래스 Serializable Demo 와 ParcelableDemo 를 추가 하여 각각 Activity 클래스 와 Person 대상 과 Police 대상 을 표시 하 는 데 이 터 를 계승 합 니 다.코드 는 다음 과 같 습 니 다:

package com.andy.testdemo; 
import com.andy.entity.Person; 
import com.andy.entity.Police; 
import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
public class TestActivity extends Activity { 
private Button sButton,pButton; 
public final static String SER_KEY = "com.andy.ser"; 
public final static String PAR_KEY = "com.andy.par"; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.main); 
sButton = (Button)findViewById(R.id.serButton); 
sButton.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
SerializeMethod(); 
} 
}); 
pButton = (Button)findViewById(R.id.parButton); 
pButton.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View v) { 
PacelableMethod(); 
} 
}); 
} 
/** 
* Serializeable        
*/ 
private void SerializeMethod(){ 
Person mPerson = new Person(); 
mPerson.setName("andy"); 
mPerson.setAge(26); 
Intent mIntent = new Intent(this,SerializableDemo.class); 
Bundle mBundle = new Bundle(); 
mBundle.putSerializable(SER_KEY,mPerson); 
mIntent.putExtras(mBundle); 
startActivity(mIntent); 
} 
/** 
* Pacelable       
*/ 
private void PacelableMethod(){ 
Police mPolice = new Police(); 
mPolice.setName("I am Police"); 
mPolice.setWorkTime(2008); 
Intent mIntent = new Intent(this,ParcelableDemo.class); 
Bundle mBundle = new Bundle(); 
mBundle.putParcelable(PAR_KEY, mPolice); 
mIntent.putExtras(mBundle); 
startActivity(mIntent); 
} 
}
SerializableDemo.java 클래스

package com.andy.testdemo; 
import com.andy.entity.Person; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
public class SerializableDemo extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
TextView mTextView = new TextView(this); 
Person mPerson = (Person)getIntent().getSerializableExtra(TestActivity.SER_KEY); 
mTextView.setText("You name is: " + mPerson.getName() + "/n"+ 
"You age is: " + mPerson.getAge()); 
setContentView(mTextView); 
} 
}
ParcelableDemo.java 클래스:

package com.andy.testdemo; 
import com.andy.entity.Police; 
import android.app.Activity; 
import android.os.Bundle; 
import android.widget.TextView; 
public class ParcelableDemo extends Activity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
TextView mTextView = new TextView(this); 
Police mPolice = (Police)getIntent().getParcelableExtra(TestActivity.PAR_KEY); 
mTextView.setText("Police name is: " + mPolice.getName()+"/n"+ 
"WorkTime is: " + mPolice.getWorkTime() + "/n"); 
setContentView(mTextView); 
} 
} 
5.AndroidManifest.xml 파일 에 새로 추 가 된 두 개의 Activity 를 등록 합 니 다.

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.andy.testdemo" 
android:versionCode="1" 
android:versionName="1.0"> 
<application android:icon="@drawable/icon" android:label="@string/app_name"> 
<activity android:name=".TestActivity" 
android:label="@string/app_name"> 
<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
</activity> 
<activity android:name=".SerializableDemo"/> 
<activity android:name=".ParcelableDemo"/> 
</application> 
<uses-sdk android:minSdkVersion="8" /> 
</manifest> 
6.실행 프로그램 보기 효과 그림:
【1】메 인 화면 캡 처:

【2】Serializable 버튼 을 누 르 면 효과

【3】Parcelable 버튼 을 누 르 면 효과

=========================================================================
인 텐트 가 서로 다른 액 티 비 티 사이 에서 전달 대상 을 어떻게 사용 하 는 지 에 대한 예 입 니 다.

좋은 웹페이지 즐겨찾기