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"?> <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: 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 plain copy 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对象的数据。代码如下:
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.html" target="_blank">java类
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类:
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进行注册。
<?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之间传递对象的例子。
本文向大家介绍Android Intent传递对象的两种方法(Serializable,Parcelable)详细介绍,包括了Android Intent传递对象的两种方法(Serializable,Parcelable)详细介绍的使用技巧和注意事项,需要的朋友参考一下 Android Intent传递对象的两种方法(Serializable,Parcelable)详细介绍 今天要给大家讲一下An
为什么bundle有、方法;但是只有方法?我是否只能传输一个元素的,而不是?那么,是用来干什么的?
本文向大家介绍在Android中通过Intent使用Bundle传递对象的使用方法,包括了在Android中通过Intent使用Bundle传递对象的使用方法的使用技巧和注意事项,需要的朋友参考一下 Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法。 被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializa
本文向大家介绍详解Android中Intent传递对象给Activity的方法,包括了详解Android中Intent传递对象给Activity的方法的使用技巧和注意事项,需要的朋友参考一下 Activity回顾 activity是android程序中最重要的组件之一,它是用户与android用户交互的主要组件,类似于桌面程序的图形界面。android程序大致可以分为看的见的组件和看不见的serv
本文向大家介绍Android中的Parcelable和Serializable之间的区别,包括了Android中的Parcelable和Serializable之间的区别的使用技巧和注意事项,需要的朋友参考一下 本示例演示了Android中可打包和可序列化之间的区别 可序列化 可序列化是一个可标记的接口,或者我们可以将其称为空接口。它没有任何预先实现的方法。可序列化将把一个对象转换为字节流。因此,
我的方法中有以下代码作为 现在我在这一行后面有了意图,如下所示: 我不知道如何把这个问题列表从一个activity的意图传递给另一个activity我的问题课