Cara Passing Data Antara Aktivitas Dengan Android Parcelable
Indonesian (Bahasa Indonesia) translation by Hasannudin Amin (you can also view the original English article)
Pengantar
Kita sering harus meneruskan data antara Aktivitas aplikasi Android. Cara mudah untuk melakukan ini adalah dengan Intent.putExtra()
, tetapi jika Anda memiliki banyak data terstruktur untuk lulus, Parcelable mungkin menjadi solusi yang lebih baik. Dalam postingan ini saya akan menunjukkan kepada Anda bagaimana Parcelable mempermudah pengkodean kelas untuk berbagi di antara Aktivitas.
Mengapa Parcelable?
Parcelable adalah Antarmuka Android-saja. Ini memungkinkan pengembang untuk membuat serial kelas sehingga propertinya dengan mudah ditransfer dari satu aktivitas ke aktivitas lainnya. Ini dilakukan dengan membaca dan menulis objek dari Parcel, yang dapat berisi data diratakan dalam wadah pesan.
Menciptakan Aktivitas Utama dan Tata Letak
Aktivitas utama kita akan menangani pengumpulan detail buku. Mari kita mulai dengan menyiapkan metode onCreate
.
package com.tutsplus.code.android.bookparcel; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //... } }
Selanjutnya, buka activity_main.xml untuk mengatur tata letak dan tampilan tampilan. Anda akan membutuhkan dua kolom entri teks dan satu tombol untuk pengiriman.
Seharusnya terlihat seperti ini:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="https://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_margin="5dp" android:padding="5dp" tools:context="com.tutsplus.code.android.bookparcel.MainActivity"> <EditText android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:padding="20dp" android:textSize="15sp" android:hint="Book Title"/> <EditText android:id="@+id/author" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:padding="20dp" android:textSize="15sp" android:hint="Book Author"/> <Button android:id="@+id/submit_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:text="Submit"/> </LinearLayout>
Sekarang buka Aktivitas utama Anda dan tautkan bidang tampilan ke aktivitas Anda. Anda harus melakukannya di dalam metode onCreate()
Anda, seperti ini:
//... final EditText mBkTitle = (EditText) findViewById(R.id.title); final EditText mBkAuthor = (EditText) findViewById(R.id.author); Button button = (Button) findViewById(R.id.submit_button);
Untuk menyelesaikan MainActivity
, Anda perlu menyiapkan onClickListener
. Ini akan dipanggil setiap kali tombol Submit ditekan. Ketika itu terjadi, rincian yang dimasukkan harus dikumpulkan dan dikirim ke aktivitas berikutnya.
button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Book book = new Book(mBkTitle.getText().toString(), mBkAuthor.getText().toString()); Intent intent = new Intent(MainActivity.this, BookActivity.class); intent.putExtra("Book", book); startActivity(intent); } });
Di sini, Anda menambahkan onClickListener
ke contoh Button
yang Anda ambil dari tata letak Aktivitas Anda. Kode ini akan dijalankan setiap kali tombol Submit diklik.
Perhatikan bahwa kita hanya meneruskan contoh Book
untuk menempatkan Extra()
. Seperti yang akan kita lihat nanti, Parcelable mengurus serialisasi data buku ke string sehingga dapat dilewatkan melalui Intent.
Sekarang setelah Akitivitas utama selesai, kita perlu membuat BookActivity
Anda serta class Book untuk menyimpan info buku.
Membuat Class Book
Mari buat kelas Book
untuk menyimpan info tentang setiap buku.
public class Book implements Parcelable { // book basics private String title; private String author; }
Kelas ini perlu menerapkan Parcelable
. Ini akan memungkinkan passing data dari MainActivity
ke BookActivity
.
Kita juga akan menambahkan beberapa fungsi pengambil standar dan konstruktor untuk membuat instance kelas dengan cepat.
// main constructor public Book(String title, String author) { this.title = title; this.author = author; } // getters public String getTitle() { return title; } public String getAuthor() { return author; }
Tulis ke Parcel
Metode writeToParcel
adalah tempat Anda menambahkan semua data kelas Anda ke paket. Ini dilakukan untuk persiapan transfer. Metode ini akan dilewati contoh Parcel yang memiliki sejumlah metode penulisan yang dapat Anda gunakan untuk menambahkan setiap bidang ke paket. Hati-hati: urutan di mana Anda menulis data itu penting!
Di sini adalah bagaimana Anda melakukannya.
// write object values to parcel for storage public void writeToParcel(Parcel dest, int flags) { dest.writeString(title); dest.writeString(author); }
Baca Data Kembali Dari Parcel
Sama seperti metode penulisan menangani penulisan data yang akan ditransfer, konstruktor digunakan untuk membaca data yang ditransfer kembali dari Paket serial. Metode ini akan dipanggil pada aktivitas penerima untuk mengumpulkan data.
Begini seharusnya tampilannya:
public Book(Parcel parcel) { title = parcel.readString(); author = parcel.readString(); }
Aktivitas penerima akan mendapatkan data sebagai string, dan kemudian akan memanggil metode getParcelableExtra
untuk memulai proses pengumpulan data. Itu akan memicu konstruktor yang kami definisikan di atas, yang akan mendesentralisasi data dan membuat contoh Book
baru.
Parcelable.Creator
Untuk melengkapi kelas Parcelable Anda, Anda perlu membuat instance Parcelable.Creator
dan menetapkannya ke bidang CREATOR
. Parcelable API akan mencari bidang ini ketika perlu deserialize sebuah instance dari kelas Anda yang telah diteruskan ke komponen lain.
public static final Parcelable.Creator<Book> CREATOR = new Parcelable.Creator<Book>() { @Override public Book createFromParcel(Parcel parcel) { return new Book(parcel); } @Override public Book[] newArray(int size) { return new Book[0]; } };
Ini mengikat semuanya bersama. Tugasnya sederhana — ini menghasilkan instance kelas Parcelable Anda dari Parcel
menggunakan data parcel yang disediakan. Kreator memanggil konstruktor yang Anda definisikan di atas, memberikannya objek Parcel
, dan konstruktor menginisialisasi atribut kelas.
Jika kelas Parcelable Anda akan memiliki kelas anak, Anda harus lebih berhati-hati dengan metode descriptContents()
. Ini akan memungkinkan Anda mengidentifikasi child class khusus yang harus dibuat oleh Parcelable.Creator
. Anda dapat membaca lebih lanjut tentang cara kerjanya di Stack Overflow.
Aktivitas Buku dan Tata Letak
Sekarang kita dapat menyelesaikan aplikasi kita dengan Aktivitas buku. Lanjutkan dan buat aktivitas kosong baru yang disebut BookActivity
. Buat tata letak terlihat seperti yang saya miliki di bawah ini.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:layout_margin="5dp" android:padding="5dp" tools:context="com.tutsplus.code.android.bookparcel.BookActivity"> <TextView android:id="@+id/bk_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Book" android:textSize="30sp" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:padding="20dp"/> <TextView android:id="@+id/bk_author" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="Author" android:textSize="30sp" android:layout_marginTop="10dp" android:layout_marginBottom="10dp" android:padding="20dp"/> </LinearLayout>
Dalam activity_book.xml, Anda hanya membutuhkan dua widget TextView
, yang akan digunakan untuk menampilkan judul dan penulis buku.
Sekarang mari kita mengatur aktivitas kita. Aktivitas Anda seharusnya sudah terlihat seperti ini:
package com.tutsplus.code.android.bookparcel; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; public class BookActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_book); } }
Dalam kegiatan ini, Anda ingin menerima data yang dilewatkan dari Aktivitas utama Anda dan menampilkannya pada tampilan Anda. Dengan demikian Anda akan mengambil contoh dari TextView
Anda menggunakan id dari set TextView
dalam tata letak Anda.
TextView mBkTitle = (TextView) findViewById(R.id.bk_title); TextView mBkAuthor = (TextView) findViewById(R.id.bk_author);
Kemudian, tentu saja, Anda akan memanggil getIntent()
karena Anda akan mengambil data dalam aktivitas ini. Data yang akan Anda ambil dikumpulkan dari kelas Buku menggunakan getParcelableExtra()
. Selanjutnya, Anda menetapkan nilai TextViews
ke data yang Anda kumpulkan. Di sini adalah bagaimana itu dilakukan.
Intent intent = getIntent(); Book book = intent.getParcelableExtra("Book"); mBkTitle.setText("Title:" + book.getTitle()); mBkAuthor.setText("Author:" + book.getAuthor());
Bangun aplikasi Anda dan luncurkan, dan Anda akan melihat keindahan kecil yang baru saja Anda bangun.



Kesimpulan
Dalam posting ini, Anda telah melihat bagaimana Anda dapat dengan mudah memindahkan objek dari satu aktivitas ke aktivitas lainnya. Anda tidak lagi harus mengambil setiap bidang data yang Anda lewati ke objek Intent secara terpisah, dan Anda tidak harus mengingat nama yang Anda lewati setiap bidang di bawah. Tidak hanya itu, tetapi proses ini lebih cepat dari fungsi serialisasi Java.
Dalam tutorial ini, Anda telah belajar bagaimana menggunakan Parcelable untuk meneruskan data dari satu aktivitas ke aktivitas lainnya. Anda dapat menyelam lebih dalam ke Parcelable dengan memeriksa dokumentasi resmi.
Sementara itu, lihat beberapa posting kita yang lain tentang pengembangan aplikasi Android!
Subscribe below and we’ll send you a weekly email summary of all new Code tutorials. Never miss out on learning about the next big thing.
Update me weekly