Saya telah membuat Parcelable
objek di bawah ini, objek saya berisi List
Produk. Dalam konstruktor saya, bagaimana cara menangani pembuatan ulang saya Parcelable
untuk List
?
Saya telah memeriksa semua metode yang tersedia dari parsel dan semua yang tersedia adalah readArrayList(ClassLoader)
. Saya tidak yakin apakah ini pendekatan terbaik, saran Anda akan sangat dihargai.
public class Outfits implements Parcelable {
private String url;
private String name;
private List<Product> products;
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<Product> getProducts() {
return products;
}
public void setProducts(List<Product> products) {
this.products = products;
}
public void writeToParcel(Parcel dest, int flags) {
Log.v("", "writeToParcel..." + flags);
dest.writeString(url);
dest.writeString(name);
dest.writeList(products);
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Outfits createFromParcel(Parcel in) {
return new Outfits(in);
}
public Outfits[] newArray(int size) {
return new Outfits[size];
}
};
@Override
public int describeContents() {
return 0;
}
/*** Here how do I populate my List of Products ***/
private Outfits(Parcel in) {
url = in.readString();
name = in.readString();
products = in.read ???????;
}
}
readList()
?Jawaban:
Jika kelas
Product
kompatibel dengan protokol parcelable, berikut harus bekerja sesuai dengan dokumentasi.sumber
writeList()
akan menulis objek menurut spesifikasi yang dijelaskan olehwriteValue()
metode. developer.android.com/reference/android/os/… Antara lain dikatakan bahwa objek dapat bersambung.readList()
adalah mitrawriteList()
dan akan membaca data yang sama.in.readList(products,null);
, mendapatkan pengecualian seperti ... Disebabkan oleh: android.os.BadParcelableException: ClassNotFoundException saat membatalkan marshalling: com.example.MyApplication.Product. Variasi untuk membaca daftar yang benar-benar cocok untuk saya adalahin.readList(products,Product.class.getClassLoader());
Pertama, objek Produk Anda harus diimplementasikan
Parcelable
.Dan kemudian, gunakan
dest.writeTypedList(products)
diwriteToParcel()
metode.Terakhir, gunakan kode berikut untuk mengurai daftar:
Untuk informasi lebih lanjut, silakan lihat Dokumen Resmi :
sumber
Dalam pengalaman pribadi saya, http://www.parcelabler.com/ adalah situs yang luar biasa untuk ini. Anda cukup membuat kelas Anda, dan menyalinnya ke situs web, dan itu menghasilkan versi Parcelable dari kelas Anda.
Saya mengujinya dengan kelas bernama "Tema" yang berisi variabel berikut:
Fungsi writeToParcel menjadi:
konstruktor yang dihasilkan:
EDIT: pastikan bahwa objek Kartu juga Dapat Dipaketkan!
sumber
Ini harus bekerja:
sumber
products = new ArrayList<Product>(); in.readList(products, Product.class.getClassLoader());
terapkan
Parcelable
pada kelas Produk juga dan kemudianin.readList(this.list, Product.class.getClassLoader());
jika salah satu solusi di atas tidak berhasil.
sumber
Cara lainnya adalah dengan menggunakan readValue & writeValue .
Item dari daftar harus menerapkan Parcelable
sumber
Ini dia ...
Pastikan "Products.java" harus diperluas dengan Parcelable
Langkah 1:
Langkah 2:
Langkah 3:
sumber
Dengan asumsi
Product
sedang mengimplementasikanParcelable
, Anda dapat menggunakan ini untuk menulis:dan ini untuk membaca:
sumber
Produk harus menerapkan Parcelable
Kemudian tulis objek Anda berisi daftar seperti
sumber