一,簡單傳遞(簡單的字符串)
第一個activity通過putExtra()將字符串傳入i
1 protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.activity_main); 4 findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() { 5 @Override 6 public void onClick(View v) { 7 Intent i= new Intent(MainActivity.this,TheAty.class); 8 i.putExtra("date","Hello SWWWWWW"); 9 startActivity(i); 10 11 } 12 }); 13 }
第二個activity通過getIntent()獲取之前put進來的數據,然后再set到UI界面中去
private TextView tv;
1 protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.activity_the_aty); 4 5 Intent i =getIntent(); 6 7 tv=(TextView) findViewById(R.id.tv);
//通過“date”關鍵字進行添加 8 tv.setText(i.getStringExtra("date")); 9 }
二,通過 包Bundle進行傳遞
通過首先將數據傳入Bundle包,然后將bundle包放入第二個activity
然后再通過第二個activity獲取這個包
1 protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.activity_main); 4 findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() { 5 @Override 6 public void onClick(View v) { 7 Intent i= new Intent(MainActivity.this,TheAty.class); 8 Bundle b=new Bundle(); 9 b.putString("name","SWWWWW"); 10 b.putInt("age",21); 11 b.putString("depart","KuaiJi"); 12 i.putExtras(b); 13 startActivity(i); 14 15 } 16 }); 17 }
第二個activity獲取包時:
1
private TextView tv;
protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.activity_the_aty); 4 5 Intent i =getIntent(); 6 Bundle data=i.getExtras(); 7 tv=(TextView) findViewById(R.id.tv); 8 tv.setText(String.format("name=%s,age=%d,depart=%s",data.getString("name"),data.getInt("age"),data.getString("depart"))); 9 }
個人覺得,最后一行format()中的那一段,類似於C語言中的printf~
三,傳遞一個對象
<一>Serializable接口
首先創建一個類User.java
構造方法User()、getter()和setter()需要創建
Serializable操作簡單,只需要一句即可。但是相對來說效率比較低
后面我會介紹另一種方法:繼承Parcelable接口
1 public class User implements Serializable{ 2 private String name; 3 private int age; 4 5 public String getName() { 6 return name; 7 } 8 9 public void setName(String name) { 10 this.name = name; 11 } 12 13 public int getAge() { 14 return age; 15 } 16 17 public void setAge(int age) { 18 this.age = age; 19 } 20 public User(String name, int age){ 21 this.name=name; 22 this.age=age; 23 } 24 }
同樣的,new的一個新的類壓入到Intent i中去
然后通過后面一個activity中getIntent()出來
MainActivity動作:
1 protected void onCreate(Bundle savedInstanceState) { 2 super.onCreate(savedInstanceState); 3 setContentView(R.layout.activity_main); 4 findViewById(R.id.btnStartAty).setOnClickListener(new View.OnClickListener() { 5 @Override 6 public void onClick(View v) { 7 Intent i= new Intent(MainActivity.this,TheAty.class); 8 9 i.putExtra("user",new User("SWWWW",21)); 10 startActivity(i); 11 12 } 13 }); 14 }
TheAty動作:
private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_the_aty); Intent i =getIntent(); // Bundle data=i.getExtras(); tv=(TextView) findViewById(R.id.tv); // //tv.setText(i.getStringExtra("date")); // tv.setText(String.format("name=%s,age=%d,depart=%s",data.getString("name"),data.getInt("age"),data.getString("depart"))); User user= (User) i.getSerializableExtra("user"); tv.setText(String.format("User info(name=%s, age=%d)",user.getName(),user.getAge())); }
<二>繼承Parcelable接口
同樣的,先寫一個User.java類
這里比較麻煩的就是必須要重寫兩個函數:
writeToParcel和describeContents 即代碼的最后兩個函數
第一個不需要改變
第二個則模擬了第一個方法中的讀取方法,不過是我們程序猿手寫。但是效率高。
為了代碼更優,還是建議大家使用這種方法。
public class User implements Parcelable { 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; } protected User(Parcel in) { name = in.readString(); age = in.readInt(); } public static final Creator<User> CREATOR = new Creator<User>() { @Override public User createFromParcel(Parcel in) { return new User(in.readString(),in.readInt()); } @Override public User[] newArray(int size) { return new User[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(getName()); dest.writeInt(getAge()); } }
最后還需要改動的一點是:
User user= (User) i.getSerializableExtra("user");
需要改為:
User user=i.getParcelableExtra("user");