入门篇:5.组件1:activity-activity之间的数据传递

Posted 安卓随笔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了入门篇: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”);
           }   

 

以上是关于入门篇:5.组件1:activity-activity之间的数据传递的主要内容,如果未能解决你的问题,请参考以下文章

原创菜鸟版Android 笔记2- Activity

Android 四大组件系列篇

入门Android 四大开发组件学习

Activiti 流程部署方式 activi 动态部署(高级源代码篇)

微信小程序 | 49,小程序入门集锦系列文章20篇

React入门----基础篇