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

    转自:链接

  • 相关阅读:
    各省最受考生青睐高职院校TOP10!2021年专科投档分数线大盘点
    Python 下载大文件,哪种方式速度更快
    Idea未识别maven项目
    Disruptor
    原型对象
    线程基础知识18 线程池
    线程基础知识16线程相关类CyclicBarrier、Semaphore、Exchanger
    ES6 01 简介
    线程基础知识17 Quene
    线程基础知识12AQS
  • 原文地址:https://www.cnblogs.com/YangBinChina/p/4741396.html
Copyright © 2020-2023  润新知