zoukankan      html  css  js  c++  java
  • 入门篇:5.组件1:activity-activity之间的数据传递

          我们已经基本了解了android中的activity的概念、跳转、及几种启动模式,然而,在实际应用中并不会单纯的启动或跳转activity,通常是在启动一个新的activity时总要携带着各式各样的数据或数据包。

    1.传递简单的数据类型

    从activity Aaty跳转到Baty并携带基本的数据类型

    Aaty:

    Intent i = new Intent(Aaty.this,Baty.class);         //初始化数据
     i.putExtra(“data”,”test”);
     startActivity(i);

    Baty:

    Intent i = getIntent();                         //获取数据
     i.getStringExtra(“data”);

    利用Intent对象作为数据的载体。

    2.传递数据包

    从activity Aaty跳转到Baty并携带数据包(Bundle)

    Aaty:

    Intent i = new Intent(Aaty.this,Baty.class);
    Bundle b = new Bundle();                  //初始化bundle
     b.putString(“stringdata”,”datatest”);
     b.putInt(“intdata”,12);
     i.putExtras(b);
     startActivity(i);

    Baty:

     Intent i = getIntent();                    //获取bundle
     Bundle data = i.getExtras();
     data.getString(“stringdata”);
     data.getInt(“intdata”);

    3.传递值对象

    (1)利用java自带的值对象序列化 java.io.Serializable

        新建一个自定义类Human类,有两个成员变量 String类型的name和int类型的年龄

       第一步:使自定义的Human类实现Serializable接口

      Aaty:

    Intent i = new Intent(Aaty.this,Baty.class);
    i.putExtra(“human”,new Human(“zhangsan”,20));
    startActivity(i);

    Baty:

    Intent i = getIntent(); 
    Human human = (Human) i.getSerializableExtra(“human”);   //获取值对象
    user.getName();  //使用对象

     特点:java自带的序列化,jvm全自动序列化,所以执行效率较低。但操作简便,代码少。

    (2)android机制的值对象序列化 android.os.Parcelable 

    Aaty:

    第一步:同样新建自定义类Human,并且使该类实现Parcelable接口

    第二步:实现重写两个方法 describeContents() 和writeToParcel(),第一个方法不用动,用它默认的就行,主要重写第二个方法:

    writeToParcel(Parcel dest,int flags){
                             dest.writeString(getName());
                             dest.writeInt(getAge());
                           }

    第三步:新建一个Creator

    public static final Creator<Human> = new Creator<Human>(){
               @Override
               public Human createFromParcle(Parcel source){
                  return new Human(sourse.readString(),source.readInt());
               }
    
               @Override
               public Human[] newArray(int size){       
                  return new User[size];
               }
           };  //注意这里有分号

    第四步:

    Intent i = new Intent(Aaty.this,Baty.class); 
    i.putExtra(“human”,new Human(“zhangsan”,20));

    Baty:

     Human human = i.getParcelableExtra(“human”);          //获取值对象
     human.getName(); //使用值对象

    4.获取activity返回参数

    有时候我们启动一个activity并传过去数据之后需要后者的activity做数据分析并给出返回值返回前者activity

     activity2:点击按钮执行:

     Intent i = new Intent();
    i.putExtra(“data”,editText.getText().toString());
    setResult(1,i); //1是传递数据的状态码(结果码)(可自定义,成功失败或失败的原因)。
    finish();//结束当前activity并将返回值传回原activity。

    activity2:

    startActivityForResult(i,0);//0是传递数据的请求码
               @Override
    protected void onActivityResult(int requestCode,int resultCode,Intent data){
                    super.onActivityResult(requestCode, resultCode, data);
                    String s = “activity2返回的数据为”+data.getStringExtra(“data”);
               }   
  • 相关阅读:
    Vue模板
    一个人的旅行
    o2o家庭助手demo
    学习html5 app项目开发
    我最近的一段时间技术总结
    我最近的工作、生活状态
    swift学习初步(四)-- 函数
    swift学习初步(三)--控制流操作
    swift学习(二)--基本运算符、字符串、集合操作
    Swift学习初步(一)
  • 原文地址:https://www.cnblogs.com/androidNot/p/5599015.html
Copyright © 2011-2022 走看看