Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]
Android中如何使用Intent在Activity之間傳遞對象[使用Serializable或者Parcelable]
????? 在Android中的不同Activity之間傳遞對象,我們可以考慮采用Bundle.putSerializable(Key,Object);也可以考慮采用Bundle.putParcelable(Key, Object);其中前面一種方法中的Object要實現Serializable接口,后面一種方法中的Object要實現Parcelable接口。下面我們以一個完整的例子來說明。
1.新建一個Android的工程,其中該工程的目錄結構如下圖:
?
2. 修改main.xml布局文件。布局文件的源碼如下:
[c-sharp]?view plaincopy
<?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.同時在該package中添加兩個實體類,一個是Person.java,該類實現Serializable接口;一個是Police.java,該類實現Parcelable接口。代碼分別如下:
Person.java:
[c-sharp]?view plaincopy
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 plaincopy
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類,同時在該包中添加類SerializableDemo和ParcelableDemo,分別繼承了Activity類和分別顯示Person對象和Police對象的數據。代碼如下:
[c-sharp]?view plaincopy
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類
[c-sharp]?view plaincopy
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類:
[c-sharp]?view plaincopy
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進行注冊。
[c-sharp]?view plaincopy
<?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按鈕的效果
?
=========================================================================
以上是如何采用Intent在不同的Activity之間傳遞對象的例子。
轉載于:https://blog.51cto.com/7990064/1530479
總結
以上是生活随笔為你收集整理的Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web页面布局方式小结
- 下一篇: amazon 汇总