我正在使用自定義parcelable類。我需要將這個類作爲數組傳遞給另一個活動和新的片段。我GOOGLE了,但我發現arrayList,但不是數組。請介意我需要傳遞數組而不是數組列表。如何實現這一目標?請再說一遍,性能是一個大問題。所以任何性能消耗較少的解決方案都非常受歡迎。如何將Parcelable數組傳遞給fragment和Activity
任何幫助將不勝感激。
我正在使用自定義parcelable類。我需要將這個類作爲數組傳遞給另一個活動和新的片段。我GOOGLE了,但我發現arrayList,但不是數組。請介意我需要傳遞數組而不是數組列表。如何實現這一目標?請再說一遍,性能是一個大問題。所以任何性能消耗較少的解決方案都非常受歡迎。如何將Parcelable數組傳遞給fragment和Activity
任何幫助將不勝感激。
這裏是寫答案
// write parcelable array
final Bundle arguments = new Bundle();
MyParcelable[] myArray = new MyParcelable[10];
arguments.putParcelableArray("key"myArray);
// read parcelable array
MyParcelable[] myArray = (MyParcelable[])getArguments().getParcelableArray("key");
分別是MyParcelable類 –
它是實現Parcelable(接口)的任何類... – deHaar
你可以像下面的snipts一樣傳遞你的arrayList。
TestFragment testFragment = new TestFragment();
Bundle args = new Bundle();
args.putSerializable("parsedData", (Serializable)mTestModelList);
testFragment.setArguments(args);
並獲得這些型號的數據parcable像如下:
mTestModelList = (List<TestModel>)getArguments().get("parsedData");
YES,序列化是慢一點比Parcelable。
而且你可以實現使用parceler
當然,ParcelWrapper可以加入到Android捆綁使用這個從活動轉移到活動:
Bundle bundle = new Bundle();
bundle.putParcelable("example", Parcels.wrap(example));
並取消引用在OnCreate()方法:
Example example = Parcels.unwrap(getIntent().getParcelableExtra("example"));
你可以得到更多關於Parcelable與Serializable相關性能的細節here。
使用像下面的類你parcealble陣列
public class ParcelableLaptop implements Parcelable {
private Laptop laptop;
public Laptop getLaptop() {
return laptop;
}
public ParcelableLaptop(Laptop laptop) {
super();
this.laptop = laptop;
}
private ParcelableLaptop(Parcel in) {
laptop = new Laptop();
laptop.setId(in.readInt());
laptop.setBrand(in.readString());
laptop.setPrice(in.readDouble());
laptop.setImageBitmap((Bitmap) in.readParcelable(Bitmap.class
.getClassLoader()));
}
/*
* you can use hashCode() here.
*/
@Override
public int describeContents() {
return 0;
}
/*
* Actual object Serialization/flattening happens here. You need to
* individually Parcel each property of your object.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeInt(laptop.getId());
parcel.writeString(laptop.getBrand());
parcel.writeDouble(laptop.getPrice());
parcel.writeParcelable(laptop.getImageBitmap(),
PARCELABLE_WRITE_RETURN_VALUE);
}
/*
* Parcelable interface must also have a static field called CREATOR,
* which is an object implementing the Parcelable.Creator interface.
* Used to un-marshal or de-serialize object from Parcel.
*/
public static final Parcelable.Creator<ParcelableLaptop> CREATOR =
new Parcelable.Creator<ParcelableLaptop>() {
public ParcelableLaptop createFromParcel(Parcel in) {
return new ParcelableLaptop(in);
}
public ParcelableLaptop[] newArray(int size) {
return new ParcelableLaptop[size];
}
};
}
現在做ParcelableLaptop的ArrayList中,並放在同捆參數
intent.putParcelableArrayListExtra("laptop", parcelableLaptopArray);
哪裏parcelableLaptop是你的模型的ArrayList中。並獲得名單:
Intent intent = getIntent();
ArrayList<ParcelableLaptop> parcelableLaptop = (ParcelableLaptop) intent
.getParcelableArrayListExtra("laptop");
檢查我的編輯評論 – user1621629