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. import java.io.Serializable;

  3. public class Person implements Serializable{

  4. /**
  5. * Auto generate
  6. */
  7. private static final long serialVersionUID = -5053412967314724078L;

  8. private String name;

  9. private int age;

  10. public Person(String name, int age) {
  11. this.name = name;
  12. this.age = age;
  13. }

  14. public String getName() {
  15. return name;
  16. }

  17. public void setName(String name) {
  18. this.name = name;
  19. }

  20. public int getAge() {
  21. return age;
  22. }

  23. public void setAge(int age) {
  24. this.age = age;
  25. }

  26. }

​查看文本​​​​打印​


  1. package com.example.hellojni;

  2. import java.io.Serializable;

  3. public class Person implements Serializable{

  4. /**
  5. * Auto generate
  6. */
  7. private static final long serialVersionUID = -5053412967314724078L;

  8. private String name;

  9. private int age;

  10. public Person(String name, int age) {
  11. this.name = name;
  12. this.age = age;
  13. }

  14. public String getName() {
  15. return name;
  16. }

  17. public void setName(String name) {
  18. this.name = name;
  19. }

  20. public int getAge() {
  21. return age;
  22. }

  23. public void setAge(int age) {
  24. this.age = age;
  25. }

  26. }





(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只提供了一个?这里我也很不解。。。)