Intent.putExtra()传递Object对象或者ArrayList<Object> (转)

Intent传递基本类型相信大家都十分熟悉,如何传递Object对象或者ArrayList<Object>对象呢?

可以通过:

(1)public Intent putExtra (String name, Serializable value)

(2)public Intent putExtra (String name, Parcelable value)

       public Intent putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)

 

一、通过实现Serializable接口传递

(1)首先让Person继承Serializable接口

 

  1. package com.example.hellojni;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class Person implements Serializable{  
  6.   
  7.     /** 
  8.      * Auto generate 
  9.      */  
  10.     private static final long serialVersionUID = -5053412967314724078L;  
  11.   
  12.     private String name;  
  13.       
  14.     private int age;  
  15.       
  16.     public Person(String name, int age) {  
  17.         this.name = name;  
  18.         this.age = age;  
  19.     }  
  20.   
  21.     public String getName() {  
  22.         return name;  
  23.     }  
  24.   
  25.     public void setName(String name) {  
  26.         this.name = name;  
  27.     }  
  28.   
  29.     public int getAge() {  
  30.         return age;  
  31.     }  
  32.   
  33.     public void setAge(int age) {  
  34.         this.age = age;  
  35.     }  
  36.       
  37. }  
  1. package com.example.hellojni;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class Person implements Serializable{  
  6.   
  7.     /** 
  8.      * Auto generate 
  9.      */  
  10.     private static final long serialVersionUID = -5053412967314724078L;  
  11.   
  12.     private String name;  
  13.       
  14.     private int age;  
  15.       
  16.     public Person(String name, int age) {  
  17.         this.name = name;  
  18.         this.age = age;  
  19.     }  
  20.   
  21.     public String getName() {  
  22.         return name;  
  23.     }  
  24.   
  25.     public void setName(String name) {  
  26.         this.name = name;  
  27.     }  
  28.   
  29.     public int getAge() {  
  30.         return age;  
  31.     }  
  32.   
  33.     public void setAge(int age) {  
  34.         this.age = age;  
  35.     }  
  36.       
  37. }  

 

 

 

(2)通过Intent来进行传输,具体方法是:public Intent putExtra (String name, Serializable value)

 

  1. Intent intent = new Intent(this, OtherActivity.class);  
  2. intent.putExtra("person", new Person("bear", 22));  
  3. startActivity(intent);  
  1. Intent intent = new Intent(this, OtherActivity.class);  
  2. intent.putExtra("person", new Person("bear", 22));  
  3. startActivity(intent);  

 

 

(3)另外一个Activity中打印值:

 

  1. Intent intent = getIntent();  
  2. Person person = (Person)intent.getSerializableExtra("person");  
  3. System.out.println("name:" + person.getName());  
  4. System.out.println("age:" + person.getAge());  
  1. Intent intent = getIntent();  
  2. Person person = (Person)intent.getSerializableExtra("person");  
  3. System.out.println("name:" + person.getName());  
  4. System.out.println("age:" + person.getAge());  



(4)传递ArrayList<Person>:

 

  1.    Intent intent = new Intent(this, OtherActivity.class);  
  2. ArrayList<Person> personList= new ArrayList<Person>();  
  3. initList(personList);  //初始化personList  
  4.    intent.putExtra("personList", personList);  
  5.    startActivity(intent);  
  1.    Intent intent = new Intent(this, OtherActivity.class);  
  2. ArrayList<Person> personList= new ArrayList<Person>();  
  3. initList(personList);  //初始化personList  
  4.    intent.putExtra("personList", personList);  
  5.    startActivity(intent);  

 

 

(注意传值类型必须是ArrayList而不能是List。调用的还是public Intent putExtra (String name, Serializable value)这个函数,另外一边获取的时候强制转化为ArrayList<Person>即可)

 

 

二、通过实现Parcelable接口传递

同上,Person类实现Parcelable接口即可:


传递Object用:public Intent putExtra (String name, Parcelable value)
传递ArrayList<Object>用:public Intent putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value)

(同是序列化的接口,为神马Parcelable分开提供了2个函数,而传Serializable只提供了一个?这里我也很不解。。。)

 

转自:链接

posted @ 2015-08-19 10:05  杨斌_济南  阅读(1582)  评论(0编辑  收藏  举报