Android Intent是在Android應用程序之間提供運行時綁定的一種重要機制。它可以在應用程序的不同組件之間傳輸數據,例如在Activity,Service,BroadcastReceiver和ContentProvider之間。
一、傳遞基本數據類型
在Android Intent中,我們可以使用putExtra方法來傳遞基本數據類型,例如字符串,整數和布爾值。這裡有一個示例代碼:
Intent i = new Intent(this, OtherActivity.class);
i.putExtra("KEY_STRING", "Hello, World!");
i.putExtra("KEY_INT", 12345);
i.putExtra("KEY_BOOLEAN", true);
startActivity(i);
在接收方Activity中,我們可以使用getExtra方法獲得傳遞的數據:
Intent i = getIntent();
String str = i.getStringExtra("KEY_STRING");
int num = i.getIntExtra("KEY_INT");
boolean bool = i.getBooleanExtra("KEY_BOOLEAN");
二、傳遞序列化對象
在Android Intent中,我們可以使用Serializable接口來傳遞自定義對象。Serializable接口是Java中的一個標記接口,通過實現它,我們可以實現讓對象將自身的狀態信息序列化為一組字節來進行傳輸和保存。
這裡有一個自定義對象Person示例:
public class Person implements Serializable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
在傳遞Person對象的Activity中,我們可以這樣寫:
Intent i = new Intent(this, OtherActivity.class);
Person person = new Person("Bob", 25);
i.putExtra("KEY_PERSON", person);
startActivity(i);
在接收方Activity中,我們可以這樣寫來獲得Person對象:
Intent i = getIntent();
Person person = (Person) i.getSerializableExtra("KEY_PERSON");
String name = person.getName();
int age = person.getAge();
三、傳遞Parcelable對象
使用Parcelable接口也可以通過Android Intent傳遞自定義對象。Parcelable接口是一個比Serializable更高效的方式,因為它們不需要通過反射來實現序列化和反序列化,而是直接將對象轉換為字節數組進行傳輸。
這裡有一個自定義對象Person示例:
public class Person implements Parcelable {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
protected Person(Parcel in) {
name = in.readString();
age = in.readInt();
}
public static final Creator CREATOR = new Creator() {
@Override
public Person createFromParcel(Parcel in) {
return new Person(in);
}
@Override
public Person[] newArray(int size) {
return new Person[size];
}
};
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeInt(age);
}
}
在傳遞Person對象的Activity中,我們可以這樣寫:
Intent i = new Intent(this, OtherActivity.class);
Person person = new Person("Bob", 25);
i.putExtra("KEY_PERSON", person);
startActivity(i);
在接收方Activity中,我們可以這樣寫來獲得Person對象:
Intent i = getIntent();
Person person = i.getParcelableExtra("KEY_PERSON");
String name = person.getName();
int age = person.getAge();
四、傳遞集合
在Android Intent中,我們可以使用Bundle對象來傳遞集合。Bundle是一種鍵值對的數據結構,它可以在Activity之間傳遞複雜數據結構。
這裡有一個ArrayList集合的代碼示例:
Intent i = new Intent(this, OtherActivity.class);
ArrayList list = new ArrayList();
list.add("A");
list.add("B");
list.add("C");
Bundle bundle = new Bundle();
bundle.putStringArrayList("KEY_LIST", list);
i.putExtras(bundle);
startActivity(i);
在接收方Activity中,我們可以這樣寫來獲得集合:
Intent i = getIntent();
Bundle bundle = i.getExtras();
ArrayList list = bundle.getStringArrayList("KEY_LIST");
for (String str : list) {
Log.d(TAG, "Item: " + str);
}
五、傳遞Parcelable集合
使用Parcelable接口也可以通過Android Intent傳遞集合。
這裡有一個ArrayList集合的代碼示例:
Intent i = new Intent(this, OtherActivity.class);
ArrayList list = new ArrayList();
list.add(new Person("Bob", 25));
list.add(new Person("Mary", 30));
Bundle bundle = new Bundle();
bundle.putParcelableArrayList("KEY_LIST", list);
i.putExtras(bundle);
startActivity(i);
在接收方Activity中,我們可以這樣寫來獲得集合:
Intent i = getIntent();
Bundle bundle = i.getExtras();
ArrayList list = bundle.getParcelableArrayList("KEY_LIST");
for (Person person : list) {
String name = person.getName();
int age = person.getAge();
Log.d(TAG, "Name: " + name + ", Age: " + age);
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/295266.html
微信掃一掃
支付寶掃一掃