Activity之間傳值方法
先創建A.B兩個Activiy,在A與B中分別創建一個按鈕button,同時分別創建文本框TextView
Intent傳值
在A activity中創建按鈕監聽
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //創建一個Intent,能夠打開B Activiy Intent i = new Intent(MainActivity.this,Main2Activity.class); //傳入數據,參數一傳數據名 參數二傳數據 i.putExtra("tag","hello world"); startActivity(i); } });在B activity獲取到數據
private TextView txView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Intent i = getIntent(); txView = (TextView) findViewById(R.id.TxView); txView.setText(i.getStringExtra("data")); }
Bundle數據包傳值
在A activity中創建按鈕監聽
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,Main2Activity.class); Bundle b = new Bundle(); b.putInt("int",123); b.putString("string","hello world"); //可以直接添加到B i.putExtras(b); //也可以傳遞Bundle i.putExtra("bundle",b); startActivity(i); } });
在B activity獲取到數據
Intent i = getIntent(); Bundle data = i.getExtras(); txView = (TextView) findViewById(R.id.TxView); //若沒有值,可以設置默認值 txView.setText( String.format("int = %d string = %s name = %s",data.getInt("int"),data.getString("string"),data.getString("name","default"))); //通過key查找bundle Bundle data1 = i.getBundleExtra("bundle");
傳遞自定義類
//傳遞類時,兩種方法,Serializable和Parcelable //Serializable直接在初始化時傳遞就可以(速度慢,使用簡單) //Parcelable需要實現系統的兩個方法(速度快,比較支持,使用複雜)
創建class類User
public class User implements 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; } }
在A activity中
findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this,Main2Activity.class); i.putExtra("user",new User("123",3)); startActivity(i); } });
在B activity中獲取
User user = (User)i.getSerializableExtra("123"); txView.setText(String.format("%s %d",user.getName(),user.getAge()));
使用Parcelable傳遞類時
public class User implements Parcelable{ private String name; private int age; protected User(Parcel in) { name = in.readString(); age = in.readInt(); } @Override public void writeToParcel(Parcel dest, int flags) { //保存數據 dest.writeString(name); dest.writeInt(age); } @Override public int describeContents() { return 0; } //創建Creator public static final Creator<User> CREATOR = new Creator<User>() { @Override public User createFromParcel(Parcel in) { //in.readBundle()使用bundle可以寫任意數據 //修改返回值 return new User(in.readString(),in.readInt()); } @Override public User[] newArray(int size) { return new User[size]; } }; 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; } }
獲取來自B activity的返回值
在button監聽裏面添加
Intent i = new Intent(MainActivity.this,Main2Activity.class);
startActivityForResult(i,0);
重寫方法
//resultCode爲result的返回碼,data爲Intent返回的數據 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); data.getStringExtra("data"); }