Saya mencoba membuat benda saya Parcelable. Namun, saya memiliki objek khusus dan objek tersebut memiliki ArrayList
atribut objek khusus lain yang telah saya buat.
apa jalan terbaik melakukan ini?
sumber
Saya mencoba membuat benda saya Parcelable. Namun, saya memiliki objek khusus dan objek tersebut memiliki ArrayList
atribut objek khusus lain yang telah saya buat.
apa jalan terbaik melakukan ini?
Anda dapat menemukan beberapa contohnya di sini , di sini (kode diambil di sini) , dan di sini .
Anda dapat membuat kelas POJO untuk ini, tetapi Anda perlu menambahkan beberapa kode tambahan untuk membuatnya Parcelable
. Lihatlah implementasinya.
public class Student implements Parcelable{
private String id;
private String name;
private String grade;
// Constructor
public Student(String id, String name, String grade){
this.id = id;
this.name = name;
this.grade = grade;
}
// Getter and setter methods
.........
.........
// Parcelling part
public Student(Parcel in){
String[] data = new String[3];
in.readStringArray(data);
// the order needs to be the same as in writeToParcel() method
this.id = data[0];
this.name = data[1];
this.grade = data[2];
}
@Оverride
public int describeContents(){
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeStringArray(new String[] {this.id,
this.name,
this.grade});
}
public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
public Student createFromParcel(Parcel in) {
return new Student(in);
}
public Student[] newArray(int size) {
return new Student[size];
}
};
}
Setelah Anda membuat kelas ini, Anda dapat dengan mudah melewatkan objek kelas ini melalui Intent
seperti ini, dan memulihkan objek ini di aktivitas target.
intent.putExtra("student", new Student("1","Mike","6"));
Di sini, siswa adalah kunci yang Anda perlukan untuk menghapus data dari bundel.
Bundle data = getIntent().getExtras();
Student student = (Student) data.getParcelable("student");
Contoh ini hanya menunjukkan String
tipe. Tapi, Anda bisa membagi data apa pun yang Anda inginkan. Cobalah.
EDIT: Contoh lain , disarankan oleh Rukmal Dias .
writeToParcel
metode penting?Berikut adalah situs web untuk membuat Kelas Parcelable dari kelas buatan Anda:
http://www.parcelabler.com/
sumber
IntelliJ IDEA dan Android Studio memiliki plugin untuk ini:
Plugin ini menghasilkan kode boilerplate Android Parcelable berdasarkan bidang di kelas.
sumber
1. Impor
Android Parcelable code generator
2. Buat kelas
3. Hasilkan> Parcelable dari menu
Selesai
sumber
File > Settings... > Plugins
dan klikBrowse repositories...
tombol.Bagaimana? Dengan anotasi.
Anda cukup membubuhi keterangan POJO dengan anotasi khusus dan perpustakaan mengerjakan sisanya.
Pro:
Cons:
Hrisey
Hrisey berbasis di Lombok . Kelas parcelable menggunakan Hrisey :
Sekarang Anda tidak perlu mengimplementasikan metode antarmuka Parcelable. Hrisey akan menghasilkan semua kode yang diperlukan selama fase preprocessing.
Hrisey dalam dependensi Gradle:
Lihat di sini untuk jenis yang didukung. Itu
ArrayList
antara mereka.Instal sebuah plugin - Hrisey xor Lombok * - untuk IDE Anda dan mulai gunakan fitur-fiturnya yang menakjubkan!
* Jangan aktifkan plugin Hrisey dan Lombok bersama-sama atau Anda akan mendapatkan kesalahan saat peluncuran IDE.
Parceler
Kelas parcelable menggunakan Parceler :
Untuk menggunakan kode yang dihasilkan, Anda dapat mereferensikan kelas yang dihasilkan secara langsung, atau melalui
Parcels
kelas utilitas menggunakanUntuk referensi
@Parcel
, panggil metode berikutParcels
kelasParceler dalam dependensi Gradle:
Lihat di README untuk tipe atribut yang didukung .
Paket Otomatis
AutoParcel adalah AutoValue ekstensi yang memungkinkan nilai-nilai Parcelable generasi.
Cukup tambahkan
implements Parcelable
ke@AutoValue
model beranotasi Anda :AutoParcel dalam file build Gradle:
PaperParcel
PaperParcel adalah prosesor anotasi yang secara otomatis menghasilkan kode boilerplate Parcelable aman untuk Kotlin dan Java. PaperParcel mendukung Kelas Data Kotlin, AutoValue Google melalui Ekstensi AutoValue, atau hanya objek kacang Java biasa.
Contoh penggunaan dari dokumen .
Beri anotasi kelas data Anda dengan
@PaperParcel
, terapkanPaperParcelable
, dan tambahkan instance statis JVM dariPaperParcelable.Creator
mis:Untuk pengguna Kotlin, lihat Penggunaan Kotlin ; Untuk pengguna AutoValue, lihat Penggunaan AutoValue .
Generalener Parcelable
Generalener Parcelable (README ditulis dalam bahasa Cina dan saya tidak memahaminya. Kontribusi untuk jawaban ini dari pengembang berbahasa Inggris-Cina dipersilakan)
Contoh penggunaan dari README .
The android-apt assist Plugin dalam bekerja dengan prosesor penjelasan dalam kombinasi dengan Android Studio.
sumber
Saya telah menemukan cara paling sederhana untuk membuat kelas Parcelable
sumber
Caranya sangat mudah, Anda bisa menggunakan plugin di android studio untuk membuat objek Parcelables.
sumber
Sekarang Anda dapat menggunakan pustaka Parceler untuk mengonversi kelas kustom apa pun Anda dalam parcelable. Beri catatan pada kelas POJO Anda dengan @Parcel . misalnya
Anda dapat membuat objek kelas Contoh dan membungkus Paket dan mengirim sebagai bundel melalui niat. misalnya
Sekarang untuk mendapatkan objek Kelas Kustom, gunakan saja
sumber
Android parcable memiliki beberapa hal unik. Itu diberikan di bawah ini:
Contoh: Untuk membuat kelas Parceble itu harus mengimplementasikan Parceble. Percable memiliki 2 metode:
Misalkan Anda memiliki kelas Person dan memiliki 3 bidang, firstName, lastName dan umur. Setelah mengimplementasikan antarmuka Parceble. antarmuka ini diberikan di bawah ini:
Di sini
writeToParcel
metode kita menulis / menambahkan data pada Parcel dalam suatu pesanan. Setelah ini kita harus menambahkan kode di bawah ini untuk membaca data dari paket:Di sini, kelas Person mengambil paket dan mendapatkan data dalam urutan yang sama selama penulisan.
Sekarang selama niat
getExtra
danputExtra
kode diberikan di bawah ini:Masukkan Ekstra :
Dapatkan Ekstra:
Kelas Orang Penuh diberikan di bawah ini :
sumber
Buat kelas Parcelable tanpa plugin di Android Studio
mengimplementasikan Parcelable di kelas Anda dan kemudian meletakkan kursor pada "mengimplementasikan Parcelable" dan tekan
Alt+Enter
dan pilihAdd Parcelable implementation
(lihat gambar). itu dia.sumber
Untuk menempatkan:
bundle.putSerializable("key",(Serializable) object);
Mendapatkan:
List<Object> obj = (List<Object>)((Serializable)bundle.getSerializable("key"));
sumber
ClassCastException
jika objek tidak diimplementasikanSerializable
.