zoukankan      html  css  js  c++  java
  • 关于 android Intent 传对象和对象数组的一些操作

     

    关于 android Intent 传对象和对象数组的一些操作

    分类: android GUI

    直接开正题,Intent传递值就是平常那些很简单的,接下来介绍传递 对象,和 对象数组

    1 .intent 传递自定义的 对象 -

    实体类继承  Serializable

    [java] view plaincopy
     
    1.   
    [java] view plaincopy
     
    1. public class AA implements Serializable{  
    2.   
    3.     public String  a;  
    4.     public String  aa;  
    5.     public String  aaa;  
    6.       
    7.       
    8. }  

    intent塞入数据端
    [java] view plaincopy
     
    1. AA a = new AA();  
    2. a.a="a";  
    3. a.aa ="aa";  
    4. a.aaa = "aaa";  
    5.   
    6. Intent in = new Intent().setClass(MainActivity.this, MainActivity1.class);  
    7. Bundle bu = new Bundle();  
    8. bu.putSerializable("enty", a);  
    9. in.putExtras(bu);  
    10. startActivity(in);  

    intent 接收数据端
    [java] view plaincopy
     
    1. AA a =(AA)this.getIntent().getExtras().getSerializable("enty");  
    2.     System.out.println("a.a ="+  app.a);  
    3.         System.out.println("a.aa ="+  app.aa);  
    4.         System.out.println("a.aaa ="+  app.aaa);  


    实体类类继承  Parcelable(简单介绍一下:

    1.什么是Parcelable ?

         Parcelable,定义了将数据写入Parcel,和从Parcel中读出的接口。一个实体(用类来表示),如果需要封装到消息中去,就必须实现这一接口,实现了这一接口,该实体就成为“可打包的”了。

    2.Parcelable 传递对象

         Android序列化对象主要有两种方法:

        1.1实现Serializable接口是JavaSE本身就支持的;

        1.2实现Parcelable接口,Parcelable是Android特有的功能,效率比实现Serializable接口高,像用于Intent数据传递也都支持,而且还可以用在进程间通信(IPC),

          除了基本类型外,只有实现了Parcelable接口的类才能被放入Parcel中。

    Parcelable的接口的定义:

    [java] view plaincopy
     
    1. public interface Parcelable {  
    2.         //内容描述接口  
    3.         public int describeContents();  
    4.         //写入接口函数,打包  
    5.         public void writeToParcel(Parcel dest, int flags);  
    6.         //1.读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入。  
    7.         //2.为了能够实现模板参数的传入,这里才定义CREATOR嵌入接口,有两个接口函数分别返回单个和多个继承类实例。  
    8.         public interface Creator<T> {  
    9.                public T createFromParcel(Parcel source);  
    10.                public T[] newArray(int size);  
    11.            }  

    [java] view plaincopy
     
    1. public class AA implements Parcelable{  
    2.   
    3.     public String  a;  
    4.     public String  aa;  
    5.     public String  aaa;  
    6.   
    7.     @Override  
    8.     public int describeContents() {  
    9.         return 0;  
    10.     }  
    11.   
    12.     @Override  
    13.     public void writeToParcel(Parcel parcel, int flags) {  
    14.         //序列化对象,必须按照声明顺序  
    15.         parcel.writeString(a);  
    16.         parcel.writeString(aa);  
    17.         parcel.writeString(aaa);  
    18.           
    19.     }  
    20.     //必须实现这个接口,它的作用是从 percel中读出来数据,顺序必须按照声明顺序  
    21.     public static final Parcelable.Creator<AA> CREATOR  = new Creator<AA>(){  
    22.         @Override  
    23.         public AA createFromParcel(Parcel source) {  
    24.             AA app=  new AA();  
    25.             app.a = source.readString();  
    26.             app.aa = source.readString();  
    27.             app.aaa = source.readString();  
    28.             return app;  
    29.         }  
    30.         @Override  
    31.         public AA[] newArray(int size) {  
    32.             return new AA[size];  
    33.         }  
    34.           
    35.     };  
    36. }  
    intent塞入数据端
    [java] view plaincopy
     
    1.                      AA a = new AA();  
    2. a.a="a";  
    3. a.aa ="aa";  
    4. a.aaa = "aaa";  
    5.   
    6. Intent in = new Intent().setClass(MainActivity.this, MainActivity1.class);  
    7. Bundle bu = new Bundle();  
    8. bu.putParcelable("enty", a);  
    9. in.putExtras(bu);  
    10. startActivity(in);  
    接收数据端
    [java] view plaincopy
     
    1. // 可以这样app =(AA)this.getIntent().getParcelableExtra("enty");  
    2.         //也可以这样写,上面的也是  
    3.         app =(AA)this.getIntent().getExtras().getParcelable("enty");  
    4.         System.out.println("a.a ="+  app.a);  
    5.         System.out.println("a.aa ="+  app.aa);  
    6.         System.out.println("a.aaa ="+  app.aaa);  


    2。 下来是 自定义对象 数组传递

    实体类类继承  Parcelable

    intent塞入数据端

    [java] view plaincopy
     
    1.                   List<AA> list_aa =new ArrayList<AA>();  
    2. AA a = new AA();  
    3. a.a="a";  
    4. a.aa ="aa";  
    5. a.aaa = "aaa";  
    6.   
    7.                        AA a1 = new AA();  
    8. a1.a="a1";  
    9. a1.aa ="aa1";  
    10. a1.aaa = "aaa1";  
    11.   
    12. list_aa.add(a);  
    13. list_aa.add(a1);  
    14.   
    15. Intent in = new Intent().setClass(MainActivity.this, MainActivity1.class);  
    16. Bundle bu = new Bundle();  
    17. bu.putParcelableArrayList("list", (ArrayList<? extends Parcelable>) list_aa);  //---  
    18. in.putExtras(bu);  
    19. startActivity(in);  
    接收list数据端
    [java] view plaincopy
     
    1. List<AA> aa =this.getIntent().getExtras().getParcelableArrayList("list");  
    2.               
    3.             for (AA aa2 : aa) {  
    4.                 System.out.println("list_a.a = "+ aa2.a);  
    5.                 System.out.println("list_a.aa = "+ aa2.aa);  
    6.                 System.out.println("list_a.aaa = "+ aa2.aaa);  
    7.                 System.out.println("=================================");  
    8.                   
    9.             }  



     
  • 相关阅读:
    何为受控组件(controlled component)
    (组件的)状态(state)和属性(props)之间有何不同
    类组件(Class component)和函数式组件(Functional component)之间有何不同
    [翻译] FSLineChart
    [翻译] DXPopover
    [翻译] LTInfiniteScrollView
    设计模式
    [翻译] LLSimpleCamera
    [翻译] VLDContextSheet
    将Model对象转换成json文本或者json二进制文件
  • 原文地址:https://www.cnblogs.com/duanweishi/p/4480088.html
Copyright © 2011-2022 走看看