传递简单参数:MainActivity---->TheAty
在MainActivity中加入按键并设置监听器,重写onClick方法:
public void onClick(View v){
Intent i=new Intent(MainActivity.this,TheAty.class);
i.putExtra("data","Hello");
startActivity(i);
}
TheAty中创建一个TextView tv后在onCreate方法中写入代码:
Intent i=getIntent();
tv=(TextView)findViewById(R.id.tv);
tv.setText(i.getStringExtra("data"));
字符串传入TheAty并成功获取。
传递复杂数据,Bundle包:
在MainActivity中重写onClick方法:
public void onClick(View v){
Intent i=new Intent(MainActivity.this,TheAty.class);
Bundle b=new Bundle();
b.putString("name","Tom");
b.putInt("age",2);
i.putExtra("data",b);/i.putExtras(b);
startActivity(i);
}
TheAty中创建一个TextView tv后在onCreate方法中写入代码:
Intent i=getIntent();
tv=(TextView)findViewById(R.id.tv);
tv.setText(String.format("name=%s,age=%d,name1=%s",data.getString("name"),data.getInt("age"),data.getString("name1","Nick")));
//当名为“name1”的变量不存在时,使用默认值“Nick”。
传递值对象:Activity之间也可以传递自定义类型的对象,但必须实现java.io.Serializable或android.os.Parcelable接口
定义一个User类:
public class User
{
pravite String name;
pravite Int age;
public User(String name,Int age)
{
this.name=name;this.age=age;
}
public String getName(){return this.name;}
public Int getAge(){return this.age;}
}
实现Serializable接口时,不需要对User进行额外操作
在MainActivity中重写onClick方法:
public void onClick(View v){
Intent i=new Intent(MainActivity.this,TheAty.class);
i.putExtra("user",new User("Tom",2));
startActivity(i);
}
TheAty中创建一个TextView tv后在onCreate方法中写入代码:
tv=(TextView)findViewById(R.id.tv);
Intent i=getIntent();
User user=(User)i.getSerializableExtra("user");
tv.setText(String.format("userinfo(name=%s,age=%d)",user.getName(),user.getAge());
实现Parcelable接口时,需实现两个方法:
int describeContents();
void writeToParcel(Parcel dest,int flags);
其中describeContents方法使用默认方法体即可,重写writeToParcel方法
void writeToParcel(Parcel dest,int flags){
dest.writeString(getName());
dest.writeInt(getAge());
}
然后添加
public static final Creator<User> CREATOR=new Creator<User>(){
public User creatFromParcel(Parcel source){
return new User(source.readString(),source.readInt());
}
public User[] newArray(int size){
return new User[size];
}
};
把TheAty中的User user=(User)i.getSerializableExtra("user");替换为
User user=(User)i.getParcelableExtra("user");
总结:Serializable接口操作简单,自动完成序列化操作,但速度较慢;Parcelable接口操作复杂,需手动完成序列化操作,速度较快
获取Activity的返回参数:在MainActivity的布局中插入一个名为textView的组件TextView,onCreate方法中的startActivity(i);替换为startActivityForResult(i,0);重写onActivityResult方法:
protected void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivityResult(requestCode,resultCode,data);
textView.setText(data.getStringExtra("data"));
}
在TheAty的布局中插入一个输入文本editText,再添加一个按钮button,添加button的事件监听器,onClick方法体为:
Intent i=new Intent();
i.putExtra("data",editText.getText().toString());
setResult(1,i);
finish();
输入文本后点击button,MainActivity即可获得从TheAty返回的参数