— Belajar Android – Intent yang biasa kita gunakan adakalnya perlu saling berkomunikasi atau menyisipkan data dari intent pertama ke intent kedua. Mekanisme Komunikasi dan Pertukaran Data antar Intent tersebut bisa menggunakan 2 cara yaitu Bundle() dan Parcelable(). Kita sebelumnya sering koq menggunakan Bundle() untuk menyisipkan sebuah flag kepada inten sebelum di panggil.
Bundle
Pada tutorial akses kamera, kita menggunakan Intent Implicit untuk memanggil akses kamera
IMAGE_URI = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); Intent cameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, IMAGE_URI); startActivityForResult(cameraIntent, IMAGE_CAPTURE_CODE);
perintah
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, IMAGE_URI);
merupakan bundle yang dikirim langsung atau pada turorial CRUD Android, ketika memanggil activity edit_tambah
Intent intent = new Intent(TampilData.this,EditTambahNote.class); Bundle bundle = new Bundle(); bundle.putInt(Setting.STATUS,Setting.TAMBAH_DATA_BARU); //kasih flag intent.putExtras(bundle); //bahwa Inten yang dibuat untuk startActivity(intent); //TAMBAH DATA BARU
mendapatkan intent dengan memanggil berikut
Bundle bundel = getIntent().getExtras(); STATUS = bundel.getInt(Setting.STATUS);
Namun ketika data yang dikirim sangat banyak yaitu berupa Class Entitas maka menggunakan Bundle() tidaklah tepat karena menjadi tidak efisien! Contoh kita punya class Entitas berikut
class Entitas_Anggota{ String nama; String kota; public Entitas_Anggota(String nama, String kota){ this.nama = nama; this.kota = kota; } public String getNama(){ return this.nama; } public String getKota(){ return this.kota; } }
kemudian memasukan data tersebut kedalam intent
Entitas_Anggota anggota = new Entitas_Anggota("bejo pamungkas","klaten"); Intent i = new Intent(this, Anggota.class); i.putExtra("NAMA", anggota.getNama()); i.putExtra("KOTA", anggota.getKota()); startActivity(i);
mendapatkan Bundle() melalui intent
public class Anggota extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_anggota); String nama = getIntent().getStringExtra("NAMA"); String kota = getIntent().getStringExtra("KOTA"); int endl = 0; } }
Bila yang daftar ternyata ada 10 anggota? tentu hal diatas kurang bagus satu-persatu
Parcelable
Sesuai kegunaanya – https://developer.android.com/guide/components/activities/parcelables-and-bundles?hl=id -kita bisa menggunakan Class Parcelable dengan implements methodnya, kita buat saja class Parcelable
public class Entitas_Anggota2 implements Parcelable { @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { } }
kode lengkapnya sebagai berikut
public class Entitas_Anggota2 implements Parcelable { String nama; String kota; public Entitas_Anggota2(String nama, String kota){ this.nama = nama; this.kota = kota; } protected Entitas_Anggota2(Parcel in) { nama = in.readString(); kota = in.readString(); } public static final Creator<Entitas_Anggota2> CREATOR = new Creator<Entitas_Anggota2>() { @Override public Entitas_Anggota2 createFromParcel(Parcel in) { return new Entitas_Anggota2(in); } @Override public Entitas_Anggota2[] newArray(int size) { return new Entitas_Anggota2[size]; } }; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel parcel, int i) { parcel.writeString(nama); parcel.writeString(kota); } }
memasukan Parcelable ke Intent
Untuk memasukan parcelable ke intent gunakan perintah berikut
Entitas_Anggota2 anggota = new Entitas_Anggota2("bejo pamungkas","klaten"); Intent i = new Intent(this, Anggota.class); i.putExtra("ANGGOTA", anggota); startActivity(i)
kemudian untuk mendapatkan parcelable dari intent yaitu
Entitas_Anggota2 anggota = getIntent().getParcelableExtra("ANGGOTA");
Demikian kita telah bahas Komunikasi dan Pertukaran Data antar Intent menggunakan class Bundle dan Parcelable.