zoukankan      html  css  js  c++  java
  • 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);
    复制代码

    接收

  • 相关阅读:
    Android基础之项目结构分析
    串口调试,提示the given port name does not start with COM/com异常解决办法,,发现是打印机在搞怪
    C# 通过URL获取图片并显示在PictureBox上的方法
    学习资料集合
    C#语音朗读文本 — TTS的实现
    SQL SERVER 2008安装错误(is not a valid login or you do have permission)
    函数调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。
    SerialPort使用
    Javascript函数的几种写法
    JS验证图片格式和大小并预览
  • 原文地址:https://www.cnblogs.com/chengzhengfu/p/4576259.html
Copyright © 2011-2022 走看看