2015-03-06 22 views
8

Mam dwie klasy, które tworzą Obiekty, które muszę przejść przez intencje, obecnie próbuję wdrożyć Parcelable, aby to zrobić.Tworzenie listy ArrayList obiektów niestandardowych

Z dotychczasowych testów mój obiekt obiektu wydaje się prawidłowo przekazywać informacje, kiedy je pakuję.

Jednak mój drugi Diner klasy zawiera ArrayList obiektów Przedmiot i nie jestem pewien, jak poprawnie wdrożyć Parcelable w tej klasie, szczególnie w częściach, które skomentowałem. Widzę, że istnieje metoda readParsableArray(), ale nic dla ArrayLists.

import android.os.Parcel; 
import android.os.Parcelable; 

import java.util.ArrayList; 

public class Diner implements Parcelable { 

    private String name; 
    private ArrayList<Item> itemList = new ArrayList<Item>(); 

    public Diner(String name) { 
     this.name = name; 
    } 

    private Diner(Parcel in) { 
     name = in.readString(); 
     // How to read in ArrayList itemList of item objects? 
     itemList = in.readParcelableArray(); 
    } 

    public static final Parcelable.Creator<Diner> CREATOR = new Parcelable.Creator<Diner>() { 
     public Diner createFromParcel(Parcel in) { 
      return new Diner(in); 
     } 

     public Diner[] newArray(int size) { 
      return new Diner[size]; 
     } 
    }; 

    @Override 
    public int describeContents() { 
     return 0; 
    } 

    @Override 
    public void writeToParcel(Parcel dest, int flags) { 
     dest.writeString(name); 
     // How to write ArrayList itemList of item objects? 
     dest.writeParcelableArray(itemList); 
    } 

    public void addItem(Item foodItem) { 
     itemList.add(foodItem); 
     foodItem.incrementBuyerCount(); 
    } 

    public double getPrice() { 
     double total = 0; 
     for(Item item : itemList) { 
      total += item.getPrice()/item.getBuyerCount(); 
     } 
     return total; 
    } 

    public String toString() { 
     return name; 
    } 

} 
+1

Ręczne pisanie kodu paczek jest podatne na błędy. Jeśli używasz Androida Studio/IntelliJ, możesz użyć [Parcelabler] (https://github.com/dallasgutauckis/android-parcelable-intellij-plugin), aby zrobić to za Ciebie. – Emmanuel

+0

Niestety jest to projekt szkolny, dlatego uważam, że używanie zewnętrznych wtyczek jest marszczeniem brwi. – user3371750

+2

Porozmawiaj ze swoim profesorem iw miły sposób zapytaj go, czy chce, żebyś zrobił to tak, jak robią to programiści w realnym świecie, czy nie. – Emmanuel

Odpowiedz

17

Zastosowanie writeTypedList i readTypedList.

parcel.writeTypedList(yourList); 

i

parcel.readTypedList(yourList, YourParcelable.CREATOR); 

Wskazówki jak zdać w CREATOR jako argument do czytania listy powrotem.

+0

Dziękuję za odpowiedź, ale pojawia się komunikat o niekompatybilnym typie, gdy próbuję użyć następującej linii - itemList = in.readTypedList (itemList, Item.CREATOR); – user3371750

+1

@ user3371750 'readTypedList' ma typ pustego miejsca, wypełni dowolną listę, którą do niego przekażesz. –

Powiązane problemy