Android之Activity之间传递对象

转载 2016年08月29日 03:26:53

在很多时候,我们需要在Activity之间传递对象,比如当你点击了某列表的item,需要传递给下一个Activity该对象,那我们需要该怎么做呢?


Android支持两种传递对象的方式,一种是bundle.putSerializable方式,一种是bundle.putParcelable。


那么下面我们就用一个例子来实践Activity传递对象:


1.首先建立两个类,一个Teacher类表示老师,一个Student类表示学生。内容分别如下:

  1. <span style="font-size:18px;">public class Teacher implements Serializable {  
  2.   
  3.     private static final long serialVersionUID = -7060210544600464481L;  
  4.   
  5.     private String name;  
  6.     private int age;  
  7.     private String addr;  
  8.   
  9.     public Teacher(String name, int age, String addr) {  
  10.         super();  
  11.         this.name = name;  
  12.         this.age = age;  
  13.         this.addr = addr;  
  14.     }  
  15.   
  16.     public String getName() {  
  17.         return name;  
  18.     }  
  19.   
  20.     public void setName(String name) {  
  21.         this.name = name;  
  22.     }  
  23.   
  24.     public int getAge() {  
  25.         return age;  
  26.     }  
  27.   
  28.     public void setAge(int age) {  
  29.         this.age = age;  
  30.     }  
  31.   
  32.     public String getAddr() {  
  33.         return addr;  
  34.     }  
  35.   
  36.     public void setAddr(String addr) {  
  37.         this.addr = addr;  
  38.     }  
  39.   
  40.     @Override  
  41.     public String toString() {  
  42.         String temp = "老师姓名:" + this.name + " 年龄:" + this.age + " 地址:"  
  43.                 + this.addr;  
  44.         return temp;  
  45.     }  
  46.   
  47. }</span>  


  1. <span style="font-size:18px;">import android.os.Parcel;  
  2. import android.os.Parcelable;  
  3.   
  4. public class Student implements Parcelable {  
  5.   
  6.     private String name;  
  7.     private int age;  
  8.     private String addr;  
  9.   
  10.     public static final Parcelable.Creator<Student> CREATOR = new Creator<Student>() {  
  11.   
  12.         @Override  
  13.         public Student[] newArray(int size) {  
  14.             return new Student[size];  
  15.         }  
  16.   
  17.         @Override  
  18.         public Student createFromParcel(Parcel source) {  
  19.             Student stu = new Student();  
  20.             stu.name = source.readString();  
  21.             stu.age = source.readInt();  
  22.             stu.addr = source.readString();  
  23.             return stu;  
  24.         }  
  25.     };  
  26.   
  27.     @Override  
  28.     public int describeContents() {  
  29.         // TODO Auto-generated method stub  
  30.         return 0;  
  31.     }  
  32.   
  33.     @Override  
  34.     public void writeToParcel(Parcel dest, int flags) {  
  35.         dest.writeString(name);  
  36.         dest.writeInt(age);  
  37.         dest.writeString(addr);  
  38.     }  
  39.       
  40.     public Student(){  
  41.           
  42.     }  
  43.       
  44.     public Student(String name, int age, String addr) {  
  45.         super();  
  46.         this.name = name;  
  47.         this.age = age;  
  48.         this.addr = addr;  
  49.     }  
  50.   
  51.     public String getName() {  
  52.         return name;  
  53.     }  
  54.   
  55.     public void setName(String name) {  
  56.         this.name = name;  
  57.     }  
  58.   
  59.     public int getAge() {  
  60.         return age;  
  61.     }  
  62.   
  63.     public void setAge(int age) {  
  64.         this.age = age;  
  65.     }  
  66.   
  67.     public String getAddr() {  
  68.         return addr;  
  69.     }  
  70.   
  71.     public void setAddr(String addr) {  
  72.         this.addr = addr;  
  73.     }  
  74.       
  75.     @Override  
  76.     public String toString() {  
  77.         String temp = "学生姓名:" + this.name + " 年龄:" + this.age + " 地址:"  
  78.                 + this.addr;  
  79.         return temp;  
  80.     }  
  81.       
  82. }</span>  


其中Teacher类实现了Serializable接口,Student类实现了Parcelable接口。


2.创建两个Activity,第一个Activity叫做FirstActivity,它里面有两个对象:一个Teacher对象,一个Student对象,我们现在需要将这两个对象传递给第二个Activity,即SecondActivity。


首先我们看一下FirstActivity的布局:



FirstActivity的内容如下:

  1. import android.os.Bundle;  
  2. import android.app.Activity;  
  3. import android.content.Intent;  
  4. import android.view.Menu;  
  5. import android.view.View;  
  6. import android.view.View.OnClickListener;  
  7.   
  8. public class FirstActivity extends Activity implements OnClickListener{  
  9.       
  10.     public static final String TEACHER_KEY = "key_teacher";  
  11.     public static final String STUDENT_KEY = "key_student";  
  12.       
  13.     private Teacher teacher = new Teacher("刘备"36"荆州");  
  14.     private Student student = new Student("张飞"32"新野");  
  15.       
  16.     @Override  
  17.     protected void onCreate(Bundle savedInstanceState) {  
  18.         super.onCreate(savedInstanceState);  
  19.         setContentView(R.layout.activity_first);  
  20.           
  21.         findViewById(R.id.button1).setOnClickListener(this);  
  22.     }  
  23.   
  24.     @Override  
  25.     public void onClick(View v) {  
  26.         switch (v.getId()) {  
  27.         case R.id.button1:  
  28.             Bundle bundle = new Bundle();  
  29.             bundle.putSerializable(TEACHER_KEY, teacher);  
  30.             bundle.putParcelable(STUDENT_KEY, student);  
  31.             Intent intent = new Intent(FirstActivity.this,SecondActivity.class);  
  32.             intent.putExtras(bundle);  
  33.             startActivity(intent);  
  34.             break;  
  35.   
  36.         default:  
  37.             break;  
  38.         }  
  39.           
  40.     }  
  41.   
  42. }  



然后我们再看一下SecondActivity的布局:


里面就只有一个TextView。


然后我们看一下SecondActivity的内容,它主要是将传递过来的对象显示到TextView当中:

  1. import android.os.Bundle;  
  2. import android.app.Activity;  
  3. import android.content.Intent;  
  4. import android.view.Menu;  
  5. import android.widget.TextView;  
  6.   
  7. public class SecondActivity extends Activity {  
  8.   
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.activity_second);  
  13.           
  14.         Intent intent = this.getIntent();  
  15.         Bundle bundle = intent.getExtras();  
  16.         Teacher t = (Teacher) bundle.getSerializable(FirstActivity.TEACHER_KEY);  
  17.         Student s = bundle.getParcelable(FirstActivity.STUDENT_KEY);  
  18.           
  19.         String text = t.toString() + "\n" + s.toString();  
  20.           
  21.         ((TextView)findViewById(R.id.text_view)).setText(text);  
  22.     }  
  23.   
  24.   
  25. }  

当我们点击了FirstActivity的界面上的"开始传递对象"按钮后,跳转到SecondActivity,界面如下:



很显然,这两种方式都可以成功的在Activity之间传递对象。


希望以上内容对各位读者能够带来帮助!

【Android开发那点破事】Android2个Activity之间传递对象

今天的破事,我们来聊聊在Android中,如果在两个Activity之间传递对象。首先我们知道利用Intent的putExtra方法放入要传递的数据。看看API上的函数: ...
  • huxiweng
  • huxiweng
  • 2013年11月25日 16:56
  • 17119

在Activity之间传递对象

今天来讲向一个Activity中传递对象在这里声明,如果一个对象要被传递,那么该对象必须通过Serializable接口或者Parcelable接口来实现对象的序列化。Serializable为JAV...
  • yd201430320529
  • yd201430320529
  • 2015年10月10日 13:08
  • 1974

Android Activity之间实现数据(对象,对象集合)传递

Android Activity之间实现数据传递是一项非常重要的技术,今天我就来讲一讲如何实现数据传递: 1.基本数据传递 MainActivity.java ...
  • zhangkaidsy
  • zhangkaidsy
  • 2017年06月16日 20:36
  • 1796

Android之Activity之间传递对象

在很多时候,我们需要在Activity之间传递对象,比如当你点击了某列表的item,需要传递给下一个Activity该对象,那我们需要该怎么做呢? Android支持两种传递对象的方式,一种是bu...
  • bear_huangzhen
  • bear_huangzhen
  • 2015年07月25日 21:21
  • 1050

Android Intent传值和Activity之间对象列表传递

activity对象列表传递
  • u010142034
  • u010142034
  • 2016年10月09日 21:21
  • 1235

Android Activity 之间传递对象

第一个Activity      A.java   中的代码:      Intent intent=new Intent();      intent.setClass(A.this, B.c...
  • lyg642259806
  • lyg642259806
  • 2012年08月18日 21:51
  • 689

Activity 之间传递对象的方法

总结一下Activity之间传递对象的方法首先,在我们的javabean内部的属性都做了封装一后,使用实现Parcelable接口的方式来做传递,下面是我的类的代码:public class User...
  • IT___LaDeng
  • IT___LaDeng
  • 2011年07月13日 14:21
  • 653

activity之间传递对象的两种方式

activity之间传递对象有两种方式,第一种方式是类实现Serializable接口,另一种是实现Parcelable接口 第一种方式不用多说: import java.io.Seria...
  • codeteenager
  • codeteenager
  • 2016年01月08日 20:53
  • 69

android Activity之间传递对象

Activity之间传数据时,为了避免麻烦,往往会将一些值封装成对象,然后将整个对象传递过去。传对象的时候有两种情况,一种是实现Parcelable接口,一种是实现Serializable接口。 ...
  • qq_33161695
  • qq_33161695
  • 2016年10月25日 14:16
  • 78

Intent传递对象时为什么要序列化

大家都知道进行Android开发的时候,无法将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。至于怎么实现序列化,反序...
  • jiuchen4107
  • jiuchen4107
  • 2016年08月31日 09:26
  • 2258
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android之Activity之间传递对象
举报原因:
原因补充:

(最多只允许输入30个字)