标签:
我们已经基本了解了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之间的数据传递
标签:
原文地址:http://www.cnblogs.com/androidNot/p/5599015.html