Android開發人員都知要傳遞物件給Activity,不能直接寫一個public的function來set資料
而要透過intent來夾帶傳遞的訊息,能傳遞的資料型態又不能是自己定義的object
別說自己定義的了,就連ArrayList,也無法隨意的塞進去intent來傳遞
只能是以下幾種:
Intent putExtra(String name, String[] value) Intent putExtra(String name, Parcelable value) Intent putExtra(String name, long value) Intent putExtra(String name, boolean value) Intent putExtra(String name, double value) Intent putExtra(String name, Parcelable[] value) Intent putExtra(String name, char value) Intent putExtra(String name, int[] value) Intent putExtra(String name, int value) Intent putExtra(String name, double[] value) Intent putExtra(String name, short value) Intent putExtra(String name, long[] value) Intent putExtra(String name, boolean[] value) Intent putExtra(String name, short[] value) Intent putExtra(String name, String value) Intent putExtra(String name, Serializable value) Intent putExtra(String name, float[] value) Intent putExtra(String name, Bundle value) Intent putExtra(String name, byte[] value) Intent putExtra(String name, CharSequence value) Intent putExtra(String name, char[] value) Intent putExtra(String name, byte value)
因此如果要用ArrayList來傳遞物件,則需先將要傳遞的物件轉成Parcelable
import android.os.Parcel;
import android.os.Parcelable;
public class Module implements Parcelable {
private String name;
private String version;
private String url;
private String checksum;
private String size;
public Module() {
}
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setVersion(String version) {
this.version = version;
}
public String getVersion() {
return version;
}
public void setURL(String url) {
this.url = url;
}
public String getURL() {
return url;
}
public void setChecksum(String checksum) {
this.checksum = checksum;
}
public String getChecksum() {
return checksum;
}
public void setSize(String size) {
this.size = size;
}
public String getSize() {
return size;
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel out, int flags)
{
out.writeString(name);
out.writeString(version);
out.writeString(url);
out.writeString(checksum);
out.writeString(size);
}
public static final Parcelable.Creator<Module> CREATOR = new Creator<Module>() {
@Override
public Module[] newArray(int size) {
return new Module[size];
}
@Override
public Module createFromParcel(Parcel in) {
return new Module(in);
}
};
public Module(Parcel in) {
name = in.readString();
version = in.readString();
url = in.readString();
checksum = in.readString();
size = in.readString();
}
}
傳遞端:
ArrayList<Module> updateList;
Module module = new Module();
module.setName("aaa");
...(略)
updateList.add(module);
Intent intent = new Intent(context, TargetActivity.class);
intent.putParcelableArrayListExtra("updateList", updateList);
startActivity(intent);
Activity接收端:
ArrayList<Module> updateList = getIntent().getParcelableArrayListExtra("updateList");
for (int i=0; i<updateList.size(); i++) {
Module module = (Module) updateList.get(i);
...(略)
}
Place your comment