在Android中的不同Activity之間傳遞對象,我們可以考慮採用Bundle.putSerializable(Key,Object);也可以考慮採用Bundle.putParcelable(Key, Object);其中前面一種方法中的Object要實現Serializable介面,後面一種方法中的Object要實現Parcelable介面。下面我們以一個完整的例子來說明。
1.建立一個Android的工程,其中該工程的目錄結構如:
2. 修改main.xml布局檔案。布局檔案的源碼如下:
<?xml version="1.0" encoding="utf-8"?><br /><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"<br /> android:orientation="vertical"<br /> android:layout_width="fill_parent"<br /> android:layout_height="fill_parent"<br /> ><br /><TextView<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:text="@string/hello"<br /> /><br /> <Button<br /> android:id="@+id/serButton"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:text="Serializable"/><br /> <Button<br /> android:id="@+id/parButton"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:text="Parcelable"/><br /></LinearLayout>
3.在工程的src目錄下建立一個實體類包,命名為com.andy.entity.同時在該package中添加兩個實體類,一個是Person.java,該類實現Serializable介面;一個是Police.java,該類實現Parcelable介面。代碼分別如下:
Person.java:
package com.andy.entity;</p><p>import java.io.Serializable;</p><p>public class Person implements Serializable {</p><p>private static final long serialVersionUID = -6919461967497580385L;</p><p>private String name;<br />private int age;</p><p>public String getName() {<br />return name;<br />}<br />public void setName(String name) {<br />this.name = name;<br />}<br />public int getAge() {<br />return age;<br />}<br />public void setAge(int age) {<br />this.age = age;<br />}<br />}
Police.java:
package com.andy.entity;</p><p>import android.os.Parcel;<br />import android.os.Parcelable;</p><p>public class Police implements Parcelable {</p><p>private String name;<br />private int workTime;</p><p>public String getName() {<br />return name;<br />}</p><p>public void setName(String name) {<br />this.name = name;<br />}</p><p>public int getWorkTime() {<br />return workTime;<br />}</p><p>public void setWorkTime(int workTime) {<br />this.workTime = workTime;<br />}</p><p>public static final Parcelable.Creator<Police> CREATOR = new Creator<Police>() {</p><p>@Override<br />public Police createFromParcel(Parcel source) {<br />Police police = new Police();<br />police.name = source.readString();<br />police.workTime = source.readInt();<br />return police;<br />}</p><p>@Override<br />public Police[] newArray(int size) {<br />return new Police[size];<br />}<br />};</p><p>@Override<br />public int describeContents() {<br />return 0;<br />}</p><p>@Override<br />public void writeToParcel(Parcel parcel, int flags) {<br />parcel.writeString(name);<br />parcel.writeInt(workTime);<br />}<br />}
4.在包com.andy.testdemo中修改TestActivity.java類,同時在該包中添加類SerializableDemo和ParcelableDemo,分別繼承了Activity類和分別顯示Person對象和Police對象的資料。代碼如下:
package com.andy.testdemo;</p><p>import com.andy.entity.Person;<br />import com.andy.entity.Police;</p><p>import android.app.Activity;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.view.View;<br />import android.widget.Button;</p><p>public class TestActivity extends Activity {<br />private Button sButton,pButton;<br />public final static String SER_KEY = "com.andy.ser";<br />public final static String PAR_KEY = "com.andy.par";</p><p> /** Called when the activity is first created. */<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);</p><p> sButton = (Button)findViewById(R.id.serButton);<br /> sButton.setOnClickListener(new View.OnClickListener() {</p><p>@Override<br />public void onClick(View v) {<br />SerializeMethod();<br />}<br />});</p><p> pButton = (Button)findViewById(R.id.parButton);<br /> pButton.setOnClickListener(new View.OnClickListener() {</p><p>@Override<br />public void onClick(View v) {<br />PacelableMethod();<br />}<br />});<br /> }</p><p> /**<br /> * Serializeable傳遞對象的方法<br /> */<br /> private void SerializeMethod(){<br /> Person mPerson = new Person();<br /> mPerson.setName("andy");<br /> mPerson.setAge(26);<br /> Intent mIntent = new Intent(this,SerializableDemo.class);<br /> Bundle mBundle = new Bundle();<br /> mBundle.putSerializable(SER_KEY,mPerson);<br /> mIntent.putExtras(mBundle); </p><p> startActivity(mIntent);<br /> }</p><p> /**<br /> * Pacelable傳遞對象方法<br /> */<br /> private void PacelableMethod(){<br /> Police mPolice = new Police();<br /> mPolice.setName("I am Police");<br /> mPolice.setWorkTime(2008);<br /> Intent mIntent = new Intent(this,ParcelableDemo.class);<br /> Bundle mBundle = new Bundle();<br /> mBundle.putParcelable(PAR_KEY, mPolice);<br /> mIntent.putExtras(mBundle); </p><p> startActivity(mIntent);<br /> }<br />}
SerializableDemo.java類
package com.andy.testdemo;</p><p>import com.andy.entity.Person;</p><p>import android.app.Activity;<br />import android.os.Bundle;<br />import android.widget.TextView;</p><p>public class SerializableDemo extends Activity {</p><p>@Override<br />public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);</p><p>TextView mTextView = new TextView(this);<br />Person mPerson = (Person)getIntent().getSerializableExtra(TestActivity.SER_KEY);<br />mTextView.setText("You name is: " + mPerson.getName() + "/n"+<br /> "You age is: " + mPerson.getAge()); </p><p> setContentView(mTextView);<br />}</p><p>}
ParcelableDemo.java類:
package com.andy.testdemo;</p><p>import com.andy.entity.Police;</p><p>import android.app.Activity;<br />import android.os.Bundle;<br />import android.widget.TextView;</p><p>public class ParcelableDemo extends Activity {</p><p>@Override<br />public void onCreate(Bundle savedInstanceState) {<br />super.onCreate(savedInstanceState);</p><p>TextView mTextView = new TextView(this);<br />Police mPolice = (Police)getIntent().getParcelableExtra(TestActivity.PAR_KEY);<br />mTextView.setText("Police name is: " + mPolice.getName()+"/n"+<br /> "WorkTime is: " + mPolice.getWorkTime() + "/n");<br />setContentView(mTextView);<br />}</p><p>}
5.在AndroidManifest.xml檔案中為新添加的兩個Activity進行註冊。
<?xml version="1.0" encoding="utf-8"?><br /><manifest xmlns:android="http://schemas.android.com/apk/res/android"<br /> package="com.andy.testdemo"<br /> android:versionCode="1"<br /> android:versionName="1.0"><br /> <application android:icon="@drawable/icon" android:label="@string/app_name"><br /> <activity android:name=".TestActivity"<br /> android:label="@string/app_name"><br /> <intent-filter><br /> <action android:name="android.intent.action.MAIN" /><br /> <category android:name="android.intent.category.LAUNCHER" /><br /> </intent-filter><br /> </activity><br /> <activity android:name=".SerializableDemo"/><br /> <activity android:name=".ParcelableDemo"/><br /> </application><br /> <uses-sdk android:minSdkVersion="8" /></p><p></manifest>
6.運行程式查看:
【1】主介面:
【2】點擊Serializable按鈕的效果
【3】點擊Parcelable按鈕的效果
=========================================================================
以上是如何採用Intent在不同的Activity之間傳遞對象的例子。