Android學習總結——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學習路上的經驗和建議!!

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM