日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

​Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]

發布時間:2025/4/16 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ​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]的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。