Android中如何使用Intent在Activity之間傳遞對象[使用Serializable或者Parcelable]

來源:互聯網
上載者:User

      在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之間傳遞對象的例子。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.