安卓学习传递值
准备:
1.新建两个android Activity,我的是Transmit0808Activity1和Transmit0808Activity2(这个只是个人命名习惯,功能+日期+相关的Activity);
2.A.xml放置一个button按钮用来测试,B.xml放置一个TextView用来接收从A页面传递过来的数据。
一:传递简单数据
Transmit0808Activity1.java
private Button button;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transmit0808_activity1);
button = (Button) findViewById(R.id.stbtn);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent i = new Intent(Transmit0808Activity1.this,Transmit0808Activity2.class);
//方式一:传递简单数据:
i.putExtra("data", "我传过来啦"); //data是传的数据的名字,后面的是内容
startActivity(i);
}
});
}
Transmit0808Activity2.java
private TextView tv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transmit0808_activity2);
Intent i = getIntent(); //来获取接收前面传来的数据
tv = (TextView) findViewById(R.id.tev);
tv.setText(i.getStringExtra("data")); //让这个控件来显示数据
}
二:传递数据包Bundle
Transmit0808Activity1.java
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transmit0808_activity1);
button = (Button) findViewById(R.id.stbtn);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent i = new Intent(Transmit0808Activity1.this,Transmit0808Activity2.class);
//方式二:传递数据包Bundle
Bundle b = new Bundle();
b.putString("name", "张三");
b.putInt("age", 20);
i.putExtras(b);
startActivity(i);
}
});
}
Transmit0808Activity2.java
private TextView tv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transmit0808_activity2);
Intent i = getIntent(); //来获取接收前面传来的数据
Bundle data = i.getExtras();
tv = (TextView) findViewById(R.id.tev);
tv.setText(String.format("name=%s, age=%d",data.getString("name"),data.getInt("age")));
}
三:传递值对象
首先创建一个User对象,里面可以定义一些成员变量,这里面又牵涉到一个序列化的问题,一种是使用Java里面的Serializable进行序列化,一种是使用专门为移动设备设置Parcelable进行序列化,可以尝试体会下差别
第一种:使用Serializable
User.java
public class User implements Serializable {
//使用Serializable进行序列化
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String name,int age){
this.name = name;
this.age = age;
}
}
Transmit0808Activity1.java
private Button button;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transmit0808_activity1);
button = (Button) findViewById(R.id.stbtn);
button.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
Intent i = new Intent(Transmit0808Activity1.this,Transmit0808Activity2.class);
//方式三:传递值对象
i.putExtra("user",new User("张三",20));
startActivity(i);
}
});
}
Transmit0808Activity2.java
private TextView tv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transmit0808_activity2);
Intent i = getIntent();
tv = (TextView) findViewById(R.id.tev);
User user = (User) i.getSerializableExtra("user");
tv.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));
}
第二种使用Parcelable
User.java
public class User implements Parcelable {
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public User(String name,int age){
this.name = name;
this.age = age;
}
//实现里边的两个方法,把里边的数据保存起来方便传递
@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(getName());
dest.writeInt(getAge());
}
public static final Creator<User> CREATOR = new Creator<User>() {
@Override
public User[] newArray(int size) {
return new User[size];
}
//通过一个Parcel来创建一个对象
public User createFromParcel(Parcel source) {
return new User(source.readString(),source.readInt());
}
};
}
Transmit0808Activity1.java同上不需要修改
Transmit0808Activity2.java
private TextView tv;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_transmit0808_activity2);
Intent i = getIntent();
tv = (TextView) findViewById(R.id.tev);
User user = i.getParcelableExtra("user");
tv.setText(String.format("User info(name=%s,age=%d)",user.getName(),user.getAge()));
}