activity之間傳遞參數、數據包以及自定義數據對象的方法

(一):從activity  A 傳遞單個參數到acticity B。

activity 1:
  Intenrt i=new Intent(activity A.this,activity B.class);
  i.putExtra("名字","參數值");
  startActivity(i);

activity B:
  Intent i=getIntent();
  String str=i.getStringExtra("名字");//注意:兩個activity的參數名字要一樣


(二):從activity A傳遞數據包到activity B,也就是同時傳多個參數

activity A:
  Intenrt i=new Intent(activity A.this,activity B.class);
  Bundle b = new Bundle();
  b.putString("名字1","參數值");
 b.putInt("名字2","參數值");
i.putExtra(b);
  startActivity(i);

activity B:
  Intent i=getIntent();
  Bundle data = i.getExtra();
  tv.setText(String.format("%s,%d"),data.getString("名字1"),data.getInt("名字2"));
//(tv是一個textview控件,用來顯示activity傳過來的數據)


PS:補充(二):另一種在activity之間傳遞數據包的方法

Intenrt i=new Intent(activity A.this,activity B.class);
  Bundle b = new Bundle();
  b.putString("名字1","參數值");
  b.putInt("名字2","參數值");
  i.putExtra("數據包的名字",b);
  startActivity(i);

activity B:
  Intent i=getIntent();
  Bundle data = i.getBundleExtra("數據包的名字");



(三)activity之間傳遞值對象(即自定義的有數據類型的對象)

//比如我們要傳遞這樣一個自定義的對象:
public class User implements Parcelable{  //實現的這個是Android平臺提供的序列化的接口

	private String name;
	private int age;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	
	public User(String name,int age){
		this.name = name;
		this.age = age;
	}
	
	@Override
	public int describeContents(){
		
		
	}
	
	@Override
	public void writeToParcel(Parcel dest,int flags){
		dest.writeString(getName()); //手動的添加這兩個方法,把參數給保存起來,方便傳遞給其他的activity
		dest.writeInt(getAge());
	}
	
	//此外,還需要手動創建一個Creator
	public static final Creator<User> CREATOR = new Creator<user>{
		@Override
		public user createFromParcel(Parcel source){
			//如果有多個相同數據類型的話可以傳Bundle
			return new user(source.readString(), source.readInt());
		}
		
		@Override
		public User[] newArray(int size){
			return new user[size];
		}
	}
}
activity A:
Intenrt i=new Intent(activity A.this,activity B.class);
  i.putExtra("名字",new user("i love Android",20));//實例化user類,同時把兩個參數傳進去
  startActivity(i);



activity B:
  Intent i=getIntent();
  User user = i.getParcelableExtra("user");
  tv.setText(String.format("%s,%d"),user.getName(),user.getAge());
通過以上方法就可以實現把自定義的數據對象user從activity A傳到activity B。這種傳參方式雖然比較複雜但是優點是運行速率快。



發佈了31 篇原創文章 · 獲贊 44 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章