android - कस्टम ऑब्जेक्ट्स पार्सलेट योग्य के ArrayList बनाना



android-intent parcelable (1)

मेरे पास दो वर्ग हैं जो उद्देश्य के माध्यम से पारित करने के लिए आवश्यक वस्तुएं बनाते हैं, मैं वर्तमान में ऐसा करने के लिए पार्सल योग्य बनाने का प्रयास कर रहा हूं।

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

public class Item implements Parcelable {

    private String name;
    private double price;
    private int buyerCount = 0;

    public Item(String name, double price) {
        this.name = name;
        this.price = price;
    }

    private Item(Parcel in) {
        name = in.readString();
        price = in.readDouble();
    }

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

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

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

    public double getPrice() {
        return price;
    }

    public int getBuyerCount() {
        return buyerCount;
    }

    public void incrementBuyerCount() {
        buyerCount += 1;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeDouble(price);
    }
}

अब तक परीक्षण से मेरा आइटम ऑब्जेक्ट जानकारी को सही ढंग से हस्तांतरित करते हुए लगता है जब मैं इसे बंडल करता हूं।

हालांकि मेरी द्वितीय श्रेणी के डिनर में वस्तुओं के एक अर्रे सूची शामिल है और मुझे यकीन है कि कैसे इस वर्ग में सही ढंग से पार्सलेबल को लागू किया जाए, विशेष रूप से उन भागों में जहां मैंने टिप्पणी की है। मैं देखता हूं कि एक readParsableArray () विधि है लेकिन 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;
    }

}

लिखने का उपयोग करें टाइप करें सूची और readTypedList

parcel.writeTypedList(yourList);

तथा

parcel.readTypedList(yourList, YourParcelable.CREATOR);

ध्यान दें कि आप सूची को पढ़ने के लिए तर्क के रूप में क्रिएटर में कैसे गुजारें।





parcelable