核心內容:
一.在 Activity 之間傳遞簡單數據
二.在 Activity 之間傳遞復雜數據
三.在 Activity 之間傳遞自定義值對象
一.在 Activity 之間傳遞簡單數據
二.在 Activity 之間傳遞復雜數據
三.在 Activity 之間傳遞自定義值對象
軟件環境:Android Studio
一.在 Activity 之間傳遞簡單數據
主Activity:MainActivity
Intent intent=new Intent(MainActivity.this,AnotherActivity.class); //加入參數,傳遞給AnotherActivity
intent.putExtra("data","我是傳過來的參數"); startActivity(intent);
目標Activity:AnotherActivity
接收從主Activity傳遞過來的參數
getIntent().getStringExtra("data");
二.在 Activity 之間傳遞復雜數據
傳遞數據包Bundle
Intent intent=new Intent(MainActivity.this,AnotherActivity.class); Bundle b=new Bundle(); b.putString("name","小明"); b.putInt("age",20); b.putChar("sex",'男'); intent.putExtras(b); startActivity(intent);
獲取數據包Bundle
Intent i=getIntent(); Bundle data=i.getExtras(); TextView tv=(TextView)findViewById(R.id.tv);
tv.setText(String.format("name="+data.getString("name")+",age="+data.getInt("age")+",sex="+data.getChar("sex")+",score="+"99"));
三.在 Activity 之間傳遞自定義值對象
所謂的值對象就是自定義的有數據類型的對象,在實際使用當中傳遞值對象比較實用,所以這里我將着重總結一下這里。
我們新建一個數據類型Student:
這里實現了Serializable這個接口,下文中將詳細講解。
public class Student implements Serializable{ private String name; private String sex; 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 String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Student(String name,String sex,int age){ this.name=name; this.sex=sex; this.age=age; } }
當不實現這個接口,直接把數據傳給Intent時,會提示出錯。

這里有兩種解決的方法,一種是讓Student實現java內置的用於序列化的一個接口Serializable,另一種是Android提供的用於序列化的一個接口Parcelable,下面我們一個一個來看:
1.首先讓Student implements Serializable接口:
主Activity中:
intent.putExtra("Student",new Student("小明","男",20));
目標Activity中:
Intent i=getIntent(); Student student= (Student) i.getSerializableExtra("Student"); //如下方式即可獲取Student的屬性值
String name=student.getName(); String sex=student.getSex();
int age=student.getAge();
這個方法效率比較低,所以Android提供了一個專門用於序列化的接口Parcelable,下面就來簡單說說這個接口。
2.Parcelable接口
當實現這個接口之后要求我們實現這兩個方法,so,實現就好。

這里需要我們手動的去寫這些個東東,這是因為它沒有全自動化去序列的機制。
public class Student 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 Student(String name,int age){ this.name=name; this.age=age; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { //將這兩條數據保存起來用於方便傳遞
parcel.writeString(getName()); parcel.writeInt(getAge()); } public static final Creator<Student> CREATOR=new Creator<Student>() { @Override public Student createFromParcel(Parcel parcel) { return new Student(parcel.readString(),parcel.readInt()); } @Override public Student[] newArray(int i) { return new Student[i]; } }; }
主Activity中:
intent.putExtra("Student",new Student("小明",20));
目標Activity中:
Intent i=getIntent(); Student student=i.getParcelableExtra("Student"); //如下方式即可獲取Student的屬性值
String name=student.getName(); String sex=student.getSex(); int age=student.getAge();
就這兩種接口而言,Parcelable接口更快,但是很多地方需要自己寫,對於像我這樣的新手菜鳥來說消化它也是夠費勁的,希望有大神能給點Android學習路上的經驗和建議!!

