Activity 间传递 ArrayList

转自: http://www.eoeandroid.com/thread-161416-1-1.html
Activity之间简单的数据传递,可能经常用,今天遇到要传递一个ArrayList<MyClass>的问题。

花费了一点时间搞定,也学习了一些东西。再次记录以下。


1. 使用 Serializable 方法
   将类的实例序列化然后再做存储或者传输在JAVA中较为常见,在Android也可用。
    具体看代码吧,比较简单。
  1. public class MyClass implements Serializable{  
  2.         private static final long serialVersionUID = 1L;  
  3.         public String userName;  
  4.         public String psw;  
  5.         public int age;  
  6. }  
public class MyClass implements Serializable{
        private static final long serialVersionUID = 1L;
        public String userName;
        public String psw;
        public int age;
}

一个自定义类,实现Serializable接口。
  1. findViewById(R.id.send_arraylist_button).setOnClickListener(new Button.OnClickListener() {  
  2.                           
  3.                         @Override  
  4.                         public void onClick(View v) {  
  5.                                 // TODO Auto-generated method stub  
  6.                                   
  7.                                 ArrayList<MyClass> arrayList = new ArrayList<MyClass>();  
  8.                                   
  9.                                 for (int i = 0; i < 10; i++) {  
  10.                                         MyClass myClass = new MyClass();  
  11.                                         myClass.userName = ”a” + i;  
  12.                                         myClass.psw = ”b” + i;  
  13.                                         myClass.age = 10 + i;  
  14.                                           
  15.                                         arrayList.add(myClass);  
  16.                                 }  
  17.                                   
  18.                                 Intent intent = new Intent();  
  19.                                 intent.putExtra(”key”, arrayList);  
  20.                                 intent.setClass(MainActivity.this, ResultActivity.class);  
  21.                                 startActivity(intent);  
  22.                         }  
  23.                 });  
findViewById(R.id.send_arraylist_button).setOnClickListener(new Button.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub

                                ArrayList<MyClass> arrayList = new ArrayList<MyClass>();

                                for (int i = 0; i < 10; i++) {
                                        MyClass myClass = new MyClass();
                                        myClass.userName = "a" + i;
                                        myClass.psw = "b" + i;
                                        myClass.age = 10 + i;

                                        arrayList.add(myClass);
                                }

                                Intent intent = new Intent();
                                intent.putExtra("key", arrayList);
                                intent.setClass(MainActivity.this, ResultActivity.class);
                                startActivity(intent);
                        }
                });

一个Activity中传递。
  1. ArrayList<MyClass> arrayList = (ArrayList<MyClass>) getIntent().getSerializableExtra(“key”);  
  2.                 String result = ”“ ;  
  3.                 for (MyClass myClass : arrayList) {  
  4.                         result += myClass.userName + ”–” + myClass.psw + “–” + myClass.age + “\n”;  
  5.                 }  
  6.                 ((TextView)findViewById(R.id.show_result_textview)).setText(result);  
ArrayList<MyClass> arrayList = (ArrayList<MyClass>) getIntent().getSerializableExtra("key");
                String result = "" ;
                for (MyClass myClass : arrayList) {
                        result += myClass.userName + "--" + myClass.psw + "--" + myClass.age + "\n";
                }
                ((TextView)findViewById(R.id.show_result_textview)).setText(result);

另一个Activity中接收


2. 使用Parcelable 方法
  Android内存受限,迫使其封装了Parcel容器来替代Serializable方法。
  代码中做了一些注释,这里就不再解释了。
  1. /** 
  2. * Parcel类:http://developer.android.com/reference/android/os/Parcel.html <br> 
  3. * 封装数据的容器,封装后的数据可以通过Intent或IPC传递 <br> 
  4.  
  5. * Parcelable接口:http://developer.android.com/reference/android/os/Parcelable.html <br> 
  6. * 自定义类继承该接口后,其实例化后能够被写入Parcel或从Parcel中恢复。 <br> 
  7.  
  8. * 如果某个类实现了这个接口,那么它的对象实例可以写入到 Parcel 中,并且能够从中恢复, 
  9. * 并且这个类必须要有一个 static 的 field ,并且名称要为 CREATOR ,这个 field 是某个实现了 Parcelable.Creator 接口的类的对象实例。 
  10. */  
  11. public class MyClass2 implements Parcelable{  
  12.         public String userName;  
  13.         public String psw;  
  14.         public int age;  
  15.           
  16.         //静态的Parcelable.Creator接口  
  17.         public static final Parcelable.Creator<MyClass2> CREATOR = new Creator<MyClass2>() {  
  18.                   
  19.                 //创建出类的实例,并从Parcel中获取数据进行实例化  
  20.                 public MyClass2 createFromParcel(Parcel source) {  
  21.                         MyClass2 myClass2 = new MyClass2();  
  22.                         myClass2.userName = source.readString();  
  23.                         myClass2.psw = source.readString();  
  24.                         myClass2.age = source.readInt();  
  25.   
  26.                         return myClass2;  
  27.                 }  
  28.   
  29.                 public MyClass2[] newArray(int size) {  
  30.                         // TODO Auto-generated method stub  
  31.                         return new MyClass2[size];  
  32.                 }  
  33.   
  34.         };  
  35.           
  36.         //  
  37.         @Override  
  38.         public int describeContents() {  
  39.                 // TODO Auto-generated method stub  
  40.                 return 0;  
  41.         }  
  42.           
  43.         //将数据写入外部提供的Parcel中  
  44.         @Override  
  45.         public void writeToParcel(Parcel dest, int flags) {  
  46.                 // TODO Auto-generated method stub  
  47.                 dest.writeString(userName);  
  48.                 dest.writeString(psw);  
  49.                 dest.writeInt(age);  
  50.         }  
  51. }  
/**
* Parcel类:http://developer.android.com/reference/android/os/Parcel.html <br>
* 封装数据的容器,封装后的数据可以通过Intent或IPC传递 <br>
* 
* Parcelable接口:http://developer.android.com/reference/android/os/Parcelable.html <br>
* 自定义类继承该接口后,其实例化后能够被写入Parcel或从Parcel中恢复。 <br>
* 
* 如果某个类实现了这个接口,那么它的对象实例可以写入到 Parcel 中,并且能够从中恢复,
* 并且这个类必须要有一个 static 的 field ,并且名称要为 CREATOR ,这个 field 是某个实现了 Parcelable.Creator 接口的类的对象实例。
*/
public class MyClass2 implements Parcelable{
        public String userName;
        public String psw;
        public int age;

        //静态的Parcelable.Creator接口
        public static final Parcelable.Creator<MyClass2> CREATOR = new Creator<MyClass2>() {

                //创建出类的实例,并从Parcel中获取数据进行实例化
                public MyClass2 createFromParcel(Parcel source) {
                        MyClass2 myClass2 = new MyClass2();
                        myClass2.userName = source.readString();
                        myClass2.psw = source.readString();
                        myClass2.age = source.readInt();

                        return myClass2;
                }

                public MyClass2[] newArray(int size) {
                        // TODO Auto-generated method stub
                        return new MyClass2[size];
                }

        };

        //
        @Override
        public int describeContents() {
                // TODO Auto-generated method stub
                return 0;
        }

        //将数据写入外部提供的Parcel中
        @Override
        public void writeToParcel(Parcel dest, int flags) {
                // TODO Auto-generated method stub
                dest.writeString(userName);
                dest.writeString(psw);
                dest.writeInt(age);
        }
}

一个自定义类,注释中又说明,看代码。
  1. //use Parcelable  
  2.         findViewById(R.id.send_arraylist_button).setOnClickListener(new Button.OnClickListener() {  
  3.                           
  4.                         @Override  
  5.                         public void onClick(View v) {  
  6.                                 // TODO Auto-generated method stub  
  7.                                   
  8.                                 ArrayList<MyClass2> arrayList = new ArrayList<MyClass2>();  
  9.                                   
  10.                                 for (int i = 0; i < 10; i++) {  
  11.                                         MyClass2 myClass2 = new MyClass2();  
  12.                                         myClass2.userName = ”a” + i;  
  13.                                         myClass2.psw = ”b” + i;  
  14.                                         myClass2.age = 10 + i;  
  15.                                           
  16.                                         arrayList.add(myClass2);  
  17.                                 }  
  18.                                   
  19.                                 Intent intent = new Intent();  
  20.                                 intent.putParcelableArrayListExtra(”key”, arrayList);  
  21.                                 intent.setClass(MainActivity.this, ResultActivity.class);  
  22.                                 startActivity(intent);  
  23.                         }  
  24.                 });  
//use Parcelable
        findViewById(R.id.send_arraylist_button).setOnClickListener(new Button.OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                // TODO Auto-generated method stub

                                ArrayList<MyClass2> arrayList = new ArrayList<MyClass2>();

                                for (int i = 0; i < 10; i++) {
                                        MyClass2 myClass2 = new MyClass2();
                                        myClass2.userName = "a" + i;
                                        myClass2.psw = "b" + i;
                                        myClass2.age = 10 + i;

                                        arrayList.add(myClass2);
                                }

                                Intent intent = new Intent();
                                intent.putParcelableArrayListExtra("key", arrayList);
                                intent.setClass(MainActivity.this, ResultActivity.class);
                                startActivity(intent);
                        }
                });

发送
  1. //use Parcelable  
  2.                 ArrayList<MyClass2> arrayList = (ArrayList<MyClass2>) getIntent().getSerializableExtra(”key”);  
  3.                 String result = ”“ ;  
  4.                 for (MyClass2 myClass2 : arrayList) {  
  5.                         result += myClass2.userName + ”–” + myClass2.psw + “–” + myClass2.age + “\n”;  
  6.                 }  
  7.                 ((TextView)findViewById(R.id.show_result_textview)).setText(result);  
//use Parcelable
                ArrayList<MyClass2> arrayList = (ArrayList<MyClass2>) getIntent().getSerializableExtra("key");
                String result = "" ;
                for (MyClass2 myClass2 : arrayList) {
                        result += myClass2.userName + "--" + myClass2.psw + "--" + myClass2.age + "\n";
                }
                ((TextView)findViewById(R.id.show_result_textview)).setText(result);

接收。

转自冰萧的博客:http://blog.csdn.net/duanyipeng/article/details/8529017

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值