2014-01-09 1 views
1

Я работаю с настраиваемым классным классом. Мне нужно передать этот класс как массив в другое действие и новые фрагменты. Я googled, но я нашел arrayList, но не массивы. Имейте в виду, что мне нужно передать массивы, а не списки массивов. Как это сделать? Пожалуйста, помните еще раз, производительность - большая проблема. Поэтому любые решения с меньшим потреблением производительности очень приветствуются.Как передать Parcelable массив для фрагментации и активности

Любая помощь будет очень признательна.

+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 class –

+0

Это любой класс, реализующий Parcelable (interface) ... – deHaar

4

Вы можете передать свой список массива как показано ниже.

TestFragment testFragment = new TestFragment(); 
Bundle args = new Bundle(); 
args.putSerializable("parsedData", (Serializable)mTestModelList); 
testFragment.setArguments(args); 

и получить эти parcable данные в модели, как, как показано ниже:

mTestModelList = (List<TestModel>)getArguments().get("parsedData"); 

ДА, Сериализация медленно бит, чем Parcelable.

И вы можете реализовать, что использование parceler

Конечно, ParcelWrapper могут быть добавлены в Android Bundle для передачи от деятельности к деятельности с помощью этого:

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 и положить в расслоении с аргументом

intent.putParcelableArrayListExtra("laptop", parcelableLaptopArray); 

Где parcelableLaptop ваших Список_массивы модели. А чтобы получить список:

Intent intent = getIntent(); 

ArrayList<ParcelableLaptop> parcelableLaptop = (ParcelableLaptop) intent 
     .getParcelableArrayListExtra("laptop"); 
+0

ParcelableLaptop parcelableLaptop = (ParcelableLaptop) намерение .getParcelableExtra («ноутбук»); Он швыет один объект. Но мне нужен массив объектов. – Mesut

+0

Я отредактировал код pls, чтобы проверить это ... если у вас возникнут какие-либо проблемы, тогда дайте мне знать –

+0

Ваш код выглядит awsum. Пожалуйста, проверь это. Также мне нужно для массива not arrayList. Код должен быть таким: ParcelableLaptop [] – Mesut

Смежные вопросы