2014-01-09 64 views
1

我正在使用自定義parcelable類。我需要將這個類作爲數組傳遞給另一個活動和新的片段。我GOOGLE了,但我發現arrayList,但不是數組。請介意我需要傳遞數組而不是數組列表。如何實現這一目標?請再說一遍,性能是一個大問題。所以任何性能消耗較少的解決方案都非常受歡迎。如何將Parcelable數組傳遞給fragment和Activity

任何幫助將不勝感激。

+0

檢查我的編輯評論 – user1621629

回答

1

這裏是寫答案

// 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"); 
+2

分別是MyParcelable類 –

+0

它是實現Parcelable(接口)的任何類... – deHaar

4

你可以像下面的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

+0

不是一個很好的解決方案。消耗很多性能。 – Mesut

+0

是的,因爲序列化與Parcable相比太慢。 – Piyush

+0

請看我的肛門。 – Mesut

0

使用像下面的類你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"); 
+0

ParcelableLaptop parcelableLaptop =(ParcelableLaptop)intent .getParcelableExtra(「laptop」); 它接縫一個物體。但我需要對象數組。 – Mesut

+0

我已編輯代碼請檢查此...如果您有任何問題,請讓我知道 –

+0

您的代碼看起來awsum。請檢查一下。另外我需要數組而不是arrayList。代碼必須是這樣的:ParcelableLaptop [] – Mesut

相關問題