intent实现Activity之间跳转的各种传值

一、在Activity之间传递String类型的数据

  传递

@Override  
 public void onClick(View v) {  
      String num1 = firstNum.getText().toString();  
      String num2 = secondNum.getText().toString();  
                  
      Intent intent = new Intent();  
      intent.putExtra("one", num1);  
      intent.putExtra("two", num2);  
      intent.setClass(FirstActivity.this, SecondActivity.class);  
      startActivity(intent);  
  }  

接收

Intent intent = getIntent();  
String num1 = intent.getStringExtra("one");  
String num2 = intent.getStringExtra("two");  
int ret = Integer.parseInt(num1) + Integer.parseInt(num2);  
result.setText(ret+"");  


 二、在Activity之间传递ArrayList类型的数据

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. }
复制代码

一个自定义类,实现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.                 });
复制代码

一个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 + " ";
  5.                 }
  6.                 ((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.                         return myClass2;
  26.                 }
  27.                 public MyClass2[] newArray(int size) {
  28.                         // TODO Auto-generated method stub
  29.                         return new MyClass2[size];
  30.                 }
  31.         };
  32.         
  33.         //
  34.         @Override
  35.         public int describeContents() {
  36.                 // TODO Auto-generated method stub
  37.                 return 0;
  38.         }
  39.         
  40.         //将数据写入外部提供的Parcel中
  41.         @Override
  42.         public void writeToParcel(Parcel dest, int flags) {
  43.                 // TODO Auto-generated method stub
  44.                 dest.writeString(userName);
  45.                 dest.writeString(psw);
  46.                 dest.writeInt(age);
  47.         }
  48. }
复制代码


一个自定义类,注释中又说明,看代码。

  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.                 });
复制代码

发送

  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 + " ";
  6.                 }
  7.                 ((TextView)findViewById(R.id.show_result_textview)).setText(result);
复制代码

接收

原文地址:https://www.cnblogs.com/chengzhengfu/p/4576259.html