大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧!

第一步:新建一个Android工程命名为Object

大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧!

第一步:新建一个Android工程命名为ObjectTranDemo(类比较多哦!)目录结构如下图:


第二步:修改main.xml布局文件(这里我增加了两个按钮)代码如下:

[xhtml]view plaincopy
  1. <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="WelcometoMrwei'sblog."/><Buttonandroid:id="@+id/button1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Serializable"/><Buttonandroid:id="@+id/button2"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Parcelable"/></LinearLayout>

第三步:新建两个类一个是Person.java实现Serializable接口,另一个Book.java实现Parcelable接口,代码分别如下:

Person.java:

[java]view plaincopy
  1. packagecom.tutor.objecttran;importjava.io.Serializable;publicclassPersonimplementsSerializable{privatestaticfinallongserialVersionUID=-7060210544600464481L;privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}

Book.java:

[java]view plaincopy
  1. packagecom.tutor.objecttran;importandroid.os.Parcel;importandroid.os.Parcelable;publicclassBookimplementsParcelable{privateStringbookName;privateStringauthor;privateintpublishTime;publicStringgetBookName(){returnbookName;}publicvoidsetBookName(StringbookName){this.bookName=bookName;}publicStringgetAuthor(){returnauthor;}publicvoidsetAuthor(Stringauthor){this.author=author;}publicintgetPublishTime(){returnpublishTime;}publicvoidsetPublishTime(intpublishTime){this.publishTime=publishTime;}publicstaticfinalParcelable.Creator<Book>CREATOR=newCreator<Book>(){publicBookcreateFromParcel(Parcelsource){BookmBook=newBook();mBook.bookName=source.readString();mBook.author=source.readString();mBook.publishTime=source.readInt();returnmBook;}publicBook[]newArray(intsize){returnnewBook[size];}};publicintdescribeContents(){return0;}publicvoidwriteToParcel(Parcelparcel,intflags){parcel.writeString(bookName);parcel.writeString(author);parcel.writeInt(publishTime);}}

第四步:修改ObjectTranDemo.java,并且新建两个Activity,一个是ObjectTranDemo1.java,别一个是ObjectTranDemo2.java.分别用来显示Person对像数据,和Book对象数据:,代码分别如下:

ObjectTranDemo.java:

[java]view plaincopy
  1. packagecom.tutor.objecttran;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;publicclassObjectTranDemoextendsActivityimplementsOnClickListener{privateButtonsButton,pButton;publicfinalstaticStringSER_KEY="com.tutor.objecttran.ser";publicfinalstaticStringPAR_KEY="com.tutor.objecttran.par";publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);setupViews();}//我的一贯作风呵呵publicvoidsetupViews(){sButton=(Button)findViewById(R.id.button1);pButton=(Button)findViewById(R.id.button2);sButton.setOnClickListener(this);pButton.setOnClickListener(this);}//Serializeable传递对象的方法publicvoidSerializeMethod(){PersonmPerson=newPerson();mPerson.setName("frankie");mPerson.setAge(25);IntentmIntent=newIntent(this,ObjectTranDemo1.class);BundlemBundle=newBundle();mBundle.putSerializable(SER_KEY,mPerson);mIntent.putExtras(mBundle);startActivity(mIntent);}//Pacelable传递对象方法publicvoidPacelableMethod(){BookmBook=newBook();mBook.setBookName("AndroidTutor");mBook.setAuthor("Frankie");mBook.setPublishTime(2010);IntentmIntent=newIntent(this,ObjectTranDemo2.class);BundlemBundle=newBundle();mBundle.putParcelable(PAR_KEY,mBook);mIntent.putExtras(mBundle);startActivity(mIntent);}//铵钮点击事件响应publicvoidonClick(Viewv){if(v==sButton){SerializeMethod();}else{PacelableMethod();}}}

ObjectTranDemo1.java:

[java]view plaincopy
  1. packagecom.tutor.objecttran;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;publicclassObjectTranDemo1extendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);TextViewmTextView=newTextView(this);PersonmPerson=(Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);mTextView.setText("Younameis:"+mPerson.getName()+"/n"+"Youageis:"+mPerson.getAge());setContentView(mTextView);}}

ObjectTranDemo2.java:

[java]view plaincopy
  1. packagecom.tutor.objecttran;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;publicclassObjectTranDemo2extendsActivity{publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);TextViewmTextView=newTextView(this);BookmBook=(Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);mTextView.setText("Booknameis:"+mBook.getBookName()+"/n"+"Authoris:"+mBook.getAuthor()+"/n"+"PublishTimeis:"+mBook.getPublishTime());setContentView(mTextView);}}

第五步:比较重要的一步啦,修改AndroidManifest.xml文件(将两个新增的Activity,ObjectTranDemo1,ObjectTranDemo2)申明一下代码如下(第14,15行):

[xhtml]view plaincopy
  1. <?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.tutor.objecttran"android:versionCode="1"android:versionName="1.0"><applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><activityandroid:name=".ObjectTranDemo"android:label="@string/app_name"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity><activityandroid:name=".ObjectTranDemo1"></activity><activityandroid:name=".ObjectTranDemo2"></activity></application><uses-sdkandroid:minSdkVersion="7"/></manifest>

第六步:运行上述工程查看效果图啦:

效果1:首界面:


效果2:点击Serializable按钮


效果3:点击Parcelable按钮:


OK~今天就先到这里了,大家如果要嫌代码过长,不想敲的话,可以留下Email.俺给你邮过去,呵呵~希望对大家 有点小帮助 ,bye~

TranDemo(类比较多哦!)目录结构如下图:


第二步:修改main.xml布局文件(这里我增加了两个按钮)代码如下:

[xhtml]view plaincopy
  1. <?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:layout_height="fill_parent"><TextViewandroid:layout_width="fill_parent"android:layout_height="wrap_content"android:text="WelcometoMrwei'sblog."/><Buttonandroid:id="@+id/button1"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Serializable"/><Buttonandroid:id="@+id/button2"android:layout_width="fill_parent"android:layout_height="wrap_content"android:text="Parcelable"/></LinearLayout>

第三步:新建两个类一个是Person.java实现Serializable接口,另一个Book.java实现Parcelable接口,代码分别如下:

Person.java:

[java]view plaincopy
  1. packagecom.tutor.objecttran;importjava.io.Serializable;publicclassPersonimplementsSerializable{privatestaticfinallongserialVersionUID=-7060210544600464481L;privateStringname;privateintage;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicintgetAge(){returnage;}publicvoidsetAge(intage){this.age=age;}}

Book.java:

[java]view plaincopy
  1. packagecom.tutor.objecttran;importandroid.os.Parcel;importandroid.os.Parcelable;publicclassBookimplementsParcelable{privateStringbookName;privateStringauthor;privateintpublishTime;publicStringgetBookName(){returnbookName;}publicvoidsetBookName(StringbookName){this.bookName=bookName;}publicStringgetAuthor(){returnauthor;}publicvoidsetAuthor(Stringauthor){this.author=author;}publicintgetPublishTime(){returnpublishTime;}publicvoidsetPublishTime(intpublishTime){this.publishTime=publishTime;}publicstaticfinalParcelable.Creator<Book>CREATOR=newCreator<Book>(){publicBookcreateFromParcel(Parcelsource){BookmBook=newBook();mBook.bookName=source.readString();mBook.author=source.readString();mBook.publishTime=source.readInt();returnmBook;}publicBook[]newArray(intsize){returnnewBook[size];}};publicintdescribeContents(){return0;}publicvoidwriteToParcel(Parcelparcel,intflags){parcel.writeString(bookName);parcel.writeString(author);parcel.writeInt(publishTime);}}

第四步:修改ObjectTranDemo.java,并且新建两个Activity,一个是ObjectTranDemo1.java,别一个是ObjectTranDemo2.java.分别用来显示Person对像数据,和Book对象数据:,代码分别如下:

ObjectTranDemo.java:

[java]view plaincopy
  1. packagecom.tutor.objecttran;importandroid.app.Activity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;publicclassObjectTranDemoextendsActivityimplementsOnClickListener{privateButtonsButton,pButton;publicfinalstaticStringSER_KEY="com.tutor.objecttran.ser";publicfinalstaticStringPAR_KEY="com.tutor.objecttran.par";publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.main);setupViews();}//我的一贯作风呵呵publicvoidsetupViews(){sButton=(Button)findViewById(R.id.button1);pButton=(Button)findViewById(R.id.button2);sButton.setOnClickListener(this);pButton.setOnClickListener(this);}//Serializeable传递对象的方法publicvoidSerializeMethod(){PersonmPerson=newPerson();mPerson.setName("frankie");mPerson.setAge(25);IntentmIntent=newIntent(this,ObjectTranDemo1.class);BundlemBundle=newBundle();mBundle.putSerializable(SER_KEY,mPerson);mIntent.putExtras(mBundle);startActivity(mIntent);}//Pacelable传递对象方法publicvoidPacelableMethod(){BookmBook=newBook();mBook.setBookName("AndroidTutor");mBook.setAuthor("Frankie");mBook.setPublishTime(2010);IntentmIntent=newIntent(this,ObjectTranDemo2.class);BundlemBundle=newBundle();mBundle.putParcelable(PAR_KEY,mBook);mIntent.putExtras(mBundle);startActivity(mIntent);}//铵钮点击事件响应publicvoidonClick(Viewv){if(v==sButton){SerializeMethod();}else{PacelableMethod();}}}

ObjectTranDemo1.java:

[java]view plaincopy
  1. packagecom.tutor.objecttran;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;publicclassObjectTranDemo1extendsActivity{@OverridepublicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);TextViewmTextView=newTextView(this);PersonmPerson=(Person)getIntent().getSerializableExtra(ObjectTranDemo.SER_KEY);mTextView.setText("Younameis:"+mPerson.getName()+"/n"+"Youageis:"+mPerson.getAge());setContentView(mTextView);}}

ObjectTranDemo2.java:

[java]view plaincopy
  1. packagecom.tutor.objecttran;importandroid.app.Activity;importandroid.os.Bundle;importandroid.widget.TextView;publicclassObjectTranDemo2extendsActivity{publicvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);TextViewmTextView=newTextView(this);BookmBook=(Book)getIntent().getParcelableExtra(ObjectTranDemo.PAR_KEY);mTextView.setText("Booknameis:"+mBook.getBookName()+"/n"+"Authoris:"+mBook.getAuthor()+"/n"+"PublishTimeis:"+mBook.getPublishTime());setContentView(mTextView);}}

第五步:比较重要的一步啦,修改AndroidManifest.xml文件(将两个新增的Activity,ObjectTranDemo1,ObjectTranDemo2)申明一下代码如下(第14,15行):

[xhtml]view plaincopy
  1. <?xmlversion="1.0"encoding="utf-8"?><manifestxmlns:android="http://schemas.android.com/apk/res/android"package="com.tutor.objecttran"android:versionCode="1"android:versionName="1.0"><applicationandroid:icon="@drawable/icon"android:label="@string/app_name"><activityandroid:name=".ObjectTranDemo"android:label="@string/app_name"><intent-filter><actionandroid:name="android.intent.action.MAIN"/><categoryandroid:name="android.intent.category.LAUNCHER"/></intent-filter></activity><activityandroid:name=".ObjectTranDemo1"></activity><activityandroid:name=".ObjectTranDemo2"></activity></application><uses-sdkandroid:minSdkVersion="7"/></manifest>

第六步:运行上述工程查看效果图啦:

效果1:首界面:


效果2:点击Serializable按钮


效果3:点击Parcelable按钮:


OK~今天就先到这里了,大家如果要嫌代码过长,不想敲的话,可以留下Email.俺给你邮过去,呵呵~希望对大家 有点小帮助 ,bye~

更多相关文章

  1. MVC架构设计与三层模型 & MVP思想精髓与解耦
  2. Android(安卓)Kotlin使用指南
  3. Android(安卓)Studio如何设置代码自动提示
  4. Android、JUnit深入浅出(一)——JUnit初步解析
  5. android 架构之mvc
  6. android应用安全——代码安全(android代码混淆)
  7. Android(安卓)APIDemos 研读之一:android.graphics.Movie
  8. Android(安卓)自定义控件
  9. Android实现图表绘制和展示

随机推荐

  1. Android系统服务-简介
  2. 基于Android平台的物联网网关方案设计
  3. Android(安卓)L之 VectorDrawable
  4. Android三种动画详解
  5. 【Android(安卓)Dev Guide - 03】 - Cont
  6. Android通知栏的变化
  7. Android(安卓)ThreadLocal 源码分析
  8. 《Android(安卓)Dev Guide》系列教程7:And
  9. Android布局——Linearlayout线性布局
  10. Ubuntu共享WiFi(AP)给Android方法【修正