安卓學習傳遞值
準備:
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()));
}