大家好,好久不見,今天要給大家講一下Android中Intent中如何傳遞對象,就我目前所知道的有兩種方法,一種是Bundle.putSerializable(Key,Object);另一種是Bundle.putParcelable(Key, Object);當然這些Object是有一定的條件的,前者是實現了Serializable介面,而後者是實現了Parcelable介面,為了讓大家更容易理解我還是照常寫了一個簡單的Demo,大家就一步一步跟我來吧!
第一步:建立一個Android工程命名為ObjectTranDemo(類比較多哦!)目錄結構如:
第二步:修改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="Welcome to Mr wei's blog."<br /> /><br /><Button<br />android:id="@+id/button1"<br />android:layout_width="fill_parent"<br />android:layout_height="wrap_content"<br />android:text="Serializable"<br />/><br /><Button<br />android:id="@+id/button2"<br />android:layout_width="fill_parent"<br />android:layout_height="wrap_content"<br />android:text="Parcelable"<br />/><br /></LinearLayout>
第三步:建立兩個類一個是Person.java實現Serializable介面,另一個Book.java實現Parcelable介面,代碼分別如下:
Person.java:
package com.tutor.objecttran;<br />import java.io.Serializable;<br />public class Person implements Serializable {<br />private static final long serialVersionUID = -7060210544600464481L;<br />private String name;<br />private int age;<br />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 />}</p><p>}<br />
Book.java:
package com.tutor.objecttran;<br />import android.os.Parcel;<br />import android.os.Parcelable;<br />public class Book implements Parcelable {<br />private String bookName;<br />private String author;<br />private int publishTime;</p><p>public String getBookName() {<br />return bookName;<br />}<br />public void setBookName(String bookName) {<br />this.bookName = bookName;<br />}<br />public String getAuthor() {<br />return author;<br />}<br />public void setAuthor(String author) {<br />this.author = author;<br />}<br />public int getPublishTime() {<br />return publishTime;<br />}<br />public void setPublishTime(int publishTime) {<br />this.publishTime = publishTime;<br />}</p><p>public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() {<br />public Book createFromParcel(Parcel source) {<br />Book mBook = new Book();<br />mBook.bookName = source.readString();<br />mBook.author = source.readString();<br />mBook.publishTime = source.readInt();<br />return mBook;<br />}<br />public Book[] newArray(int size) {<br />return new Book[size];<br />}<br />};</p><p>public int describeContents() {<br />return 0;<br />}<br />public void writeToParcel(Parcel parcel, int flags) {<br />parcel.writeString(bookName);<br />parcel.writeString(author);<br />parcel.writeInt(publishTime);<br />}<br />}<br />
第四步:修改ObjectTranDemo.java,並且建立兩個Activity,一個是ObjectTranDemo1.java,別一個是ObjectTranDemo2.java.分別用來顯示Person對像資料,和Book對象資料:,代碼分別如下:
ObjectTranDemo.java:
package com.tutor.objecttran;<br />import android.app.Activity;<br />import android.content.Intent;<br />import android.os.Bundle;<br />import android.view.View;<br />import android.view.View.OnClickListener;<br />import android.widget.Button;<br />public class ObjectTranDemo extends Activity implements OnClickListener {</p><p>private Button sButton,pButton;<br />public final static String SER_KEY = "com.tutor.objecttran.ser";<br />public final static String PAR_KEY = "com.tutor.objecttran.par";<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);<br /> setupViews();</p><p> }</p><p> //我的一貫作風呵呵<br /> public void setupViews(){<br /> sButton = (Button)findViewById(R.id.button1);<br /> pButton = (Button)findViewById(R.id.button2);<br /> sButton.setOnClickListener(this);<br /> pButton.setOnClickListener(this);<br /> }<br /> //Serializeable傳遞對象的方法<br /> public void SerializeMethod(){<br /> Person mPerson = new Person();<br /> mPerson.setName("frankie");<br /> mPerson.setAge(25);<br /> Intent mIntent = new Intent(this,ObjectTranDemo1.class);<br /> Bundle mBundle = new Bundle();<br /> mBundle.putSerializable(SER_KEY,mPerson);<br /> mIntent.putExtras(mBundle);</p><p> startActivity(mIntent);<br /> }<br /> //Pacelable傳遞對象方法<br /> public void PacelableMethod(){<br /> Book mBook = new Book();<br /> mBook.setBookName("Android Tutor");<br /> mBook.setAuthor("Frankie");<br /> mBook.setPublishTime(2010);<br /> Intent mIntent = new Intent(this,ObjectTranDemo2.class);<br /> Bundle mBundle = new Bundle();<br /> mBundle.putParcelable(PAR_KEY, mBook);<br /> mIntent.putExtras(mBundle);</p><p> startActivity(mIntent);<br /> }<br /> //銨鈕點擊事件響應<br />public void onClick(View v) {<br />if(v == sButton){<br />SerializeMethod();<br />}else{<br />PacelableMethod();<br />}<br />}<br />}
ObjectTranDemo1.java:
package com.tutor.objecttran;<br />import android.app.Activity;<br />import android.os.Bundle;<br />import android.widget.TextView;<br />public class ObjectTranDemo1 extends Activity {<br /> @Override<br /> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);</p><p> TextView mTextView = new TextView(this);<br /> Person mPerson = (Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);<br /> mTextView.setText("You name is: " + mPerson.getName() + "/n"+<br /> "You age is: " + mPerson.getAge());</p><p> setContentView(mTextView);<br /> }<br />}
ObjectTranDemo2.java:
package com.tutor.objecttran;<br />import android.app.Activity;<br />import android.os.Bundle;<br />import android.widget.TextView;<br />public class ObjectTranDemo2 extends Activity {</p><p> public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> TextView mTextView = new TextView(this);<br /> Book mBook = (Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);<br /> mTextView.setText("Book name is: " + mBook.getBookName()+"/n"+<br /> "Author is: " + mBook.getAuthor() + "/n" +<br /> "PublishTime is: " + mBook.getPublishTime());<br /> setContentView(mTextView);<br /> }<br />}
第五步:比較重要的一步啦,修改AndroidManifest.xml檔案(將兩個新增的Activity,ObjectTranDemo1,ObjectTranDemo2)申明一下代碼如下(第14,15行):
<?xml version="1.0" encoding="utf-8"?><br /><manifest xmlns:android="http://schemas.android.com/apk/res/android"<br /> package="com.tutor.objecttran"<br /> android:versionCode="1"<br /> android:versionName="1.0"><br /> <application android:icon="@drawable/icon" android:label="@string/app_name"><br /> <activity android:name=".ObjectTranDemo"<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=".ObjectTranDemo1"></activity><br /><activity android:name=".ObjectTranDemo2"></activity><br /> </application><br /> <uses-sdk android:minSdkVersion="7" /><br /></manifest>
第六步:運行上述工程查看啦:
效果1:首介面:
效果2:點擊Serializable按鈕
效果3:點擊Parcelable按鈕:
OK~今天就先到這裡了,大家如果要嫌代碼過長,不想敲的話,可以留下Email.俺給你郵過去,呵呵~希望對大家 有點小協助 ,bye~