Jumpa lagi dengan Agus Haryanto diseri tutorial Android. Pada tutorial yang lalu kita telah membahas cara membuat combobox pada android, Sekarang mari kita belajar bagaiman membuat Dynamic ComboBox (ComboBox yang dianmis). Kita pasti pernah menemui pada satu form ada dua buah combobox yang saling keterkaitan. Misalnya saja dalam sebuah form registrasi calon user, harus meregistrasikan data-data dirinya termasuk tinggal dinegara mana dan dikota apa, disini kita akan mendapatkan kecerdasan dimana apa bila kita pilih suatu Negara, maka yang muncul adalah combobox kota adalah kota-kota yang terdapat pada negera tersebut. Nah karena combobox kota ini isinya dinamis bergantung pada negara yang dipilih maka dia termasuk golongan dynamic combobox.
Sekarang mari kita lanjutkan kebagian coding.
- Buka kembali project BelajarCombobox
- Edit file main.xml lalu isi dengan code dibawah ini
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="Negara :" android:id="@+id/selection_country" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Spinner android:id="@+id/spinner_country" android:layout_width="fill_parent" android:layout_height="wrap_content" android:drawSelectorOnTop="true" /> <TextView android:text="kota :" android:id="@+id/selection_city" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <Spinner android:id="@+id/spinner_city" android:layout_width="fill_parent" android:layout_height="wrap_content" android:drawSelectorOnTop="true" /> </LinearLayout>
Pada main.xml diatas kita menambahkan satu spinner lagi untuk combobox kota
3. Edit File CreateComboBox.java lalau isi dengan code dibawah ini
package com.agus.combobox; import java.util.HashMap; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; public class CreateComboBox extends Activity implements AdapterView.OnItemSelectedListener { TextView selection_country; TextView selection_city; Spinner spin_city; String[] negara = { "Amerika", "Argentina", "Brazil", "Indonesia", "Inggris", "Malaysia", "Pilipina" }; HashMap<String, String []> hash_negara = new HashMap<String, String []>(); @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); generateData(); setContentView(R.layout.main); selection_country = (TextView) findViewById(R.id.selection_country); Spinner spin = (Spinner) findViewById(R.id.spinner_country); spin.setOnItemSelectedListener(this); ArrayAdapter<String> aa = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, negara); aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spin.setAdapter(aa); spin_city = (Spinner) findViewById(R.id.spinner_city); } public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { fillComboKota(negara[position]); } public void onNothingSelected(AdapterView<?> parent) { Toast.makeText(this, "Silahkan Pilih Negara", Toast.LENGTH_LONG).show(); } private void generateData(){ hash_negara.put("Amerika", new String[] {"Chicago","Los Angeles","Newyork"}); hash_negara.put("Indonesia", new String[] {"Bandung","Jakarta","Surabaya"}); hash_negara.put("Malaysia", new String[] {"Kuala Lumpur","Selangor","Serawak"}); } private void fillComboKota(String snegara){ String[] kota = null; ArrayAdapter<String> aa = null; try { kota = hash_negara.get(snegara); aa = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, kota); } catch (NullPointerException e) { aa = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, new String[] {}); } aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spin_city.setAdapter(aa); } }
Agar isi combobox kota sesuai dengan Negara yang dipilih, maka kita perlu mempunyai variable yang menyimpan relasi Negara dan kota, disini kita menggunakan HashMap dimana Nama Negara menjadi key dan Nama Kota menjadi datanya
HashMap<String, String []> hash_negara = new HashMap<String, String []>();
Kita sudah punya tempat untuk menyimpan relasi Negara dan kota, tetapi ini belum cukup, kita perlu mengisi tempat tersebut dengan data.
private void generateData(){ hash_negara.put("Amerika", new String[] {"Chicago","Los Angeles","Newyork"}); hash_negara.put("Indonesia", new String[] {"Bandung","Jakarta","Surabaya"}); hash_negara.put("Malaysia", new String[] {"Kuala Lumpur","Selangor","Serawak"}); }
Sekarang bagaimana cara untuk mengisi ComboBox Kota agar isinya sesuai dengan Negara yang dipilih.
Perhatikan method fillComboKota
private void fillComboKota(String snegara){ String[] kota = null; ArrayAdapter<String> aa = null; try { kota = hash_negara.get(snegara); aa = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, kota); } catch (NullPointerException e) { aa = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, new String[] {}); } aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spin_city.setAdapter(aa); } }
Method fillComboKota dipanggil setelah kita memilih suatu Negara. Disinilah keunggulan HashMap,
untuk mendapatkan data kotanya kita tidak perlu melakukan loop seperti pada Array,
kita cukup menggunakan method get
hash_negara.get(snegara);
pada method fillComboKota kita juga melakukan Handling Exception NullPointerException. apabila Negara yang dipilih tidak ditemukan sehingga menghasilkan nilai Null.
Karena Negaranya tidak ditemukan maka isi ComboBox Kota harus kosong.
aa= new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, new String[] {});
4. Sekarang mari kita jalankan programnya.
Pada ComboBox Negara Pilih Indonesia maka ComboBox Kota akan berisi Bandung, Jakarta dan Surabaya.
Pada ComboBox Negara Pilih Malaysia maka ComboBox Kota akan berisi Kuala Lumpur, Selangor dan Serawak
Dari tutorial singkat ini, ada beberapa hal yang penting. Untuk membuat aplikasi android kita menggunakan bahasa java. Keluasan pengetahuan kita di java akan sangat membantu dalam pembuatan aplikasi diandroid. Contohnya adalah bagaimana cara menyimpan data relasi Negara dan kota yang kita solusikan dengan menggunakan HashMap. Jika kita kita tidak tahu di Java ada HashMap, tentu kita akan menggunakan cara lain dan itu perlu usaha lebih untuk mensolusikannya.
Semoga Bermanfaat
Salam Hangat
Agus Haryanto
Mas, saya sudah bisa membuat aplikasi persis seperti tutorial ini. Di emulator bisa jalan, tapi pas saya deploy ke hardware kok error ya. sayangnya erornya tidak jelas kenapa. Oya, misalkan saya buildnya ke platform android 2.2 trs hardwarenya msh 1.6 apa eror ya? thx
Oh.. sudah bisa mbak. Saya tetap build ke paltform 2.2 tapi minSDK saya set 4 (1.6) bisa. Maaf sdh merepotkan : )
Wah ada yang lebih mudah. Saya udah bisa nyelesaikan tantangan pak Agus untuk yang ini. Tapi ternyata udah dikasi jawabannya, lebih pendek pula. jadi gak enak 🙂
oh ya pak, mari mampir di tongkrongan kami. Share disini juga pak klo gak keberatan. http://diskusiandroid.com 😀
Makasih pak tutorialnya 🙂
@sutadi, ia habis belum ada yang jawab, yah tak jawab sendiri aja 🙂
bagaimana jika datanya diambil dari database.
kan g mungkin kl 1 negara cuman sedikit kotanya.. jd harus pake database..
pak, spinner dinamis tidak berlaku untuk pemanggilan class ya?dalam negara malaysia ada kota kuala lumpur dan selangor. kemudian qt panggil class kuala lumpur hasilnya bisa masuk kedalam layout class kuala lumpur, tapi saya ga bisa masuk kedalam class selangor karna yg muncul itu class yg paling atas yaitu kuala lumpur.gmn caranya ya memanggil class yg dibawah2nya?itu yg terjadi pada project saya yg menggunakan spinner dinamis ini.mohon sangat bantuannya
mas agus, itu pakai plugin apa ya, di postingan bisa nampilin source code kaya gitu.
apa harus pake wordpress 3.1??
assalamuaikum
mas
bolehkah saya bertanya mengenai cara membuat aplikasi android
saya ingin bertanya
saya mendapat tugas praktikum mengenai android
kemudian saya ambil judul aplikasi sistem pernafasan pada manusia
saya ingin bertanya
bagaimna cara membuat tampilan menu yang bisa langsung melink ke suatu nama lalu bila kita klik link itu terdapat informasi berupa gambar dan tulisan misalkan bila kita pilih menu organ maka kita akan masuk ke link nama – nama organ seperti hidung dan bila kita mengklik hidung maka akan tampil gambar dan informasi mengenai hidung
harap bantuannya
mas kalo seandainya habis milih kuala lumpur trus dibawahnya itu bisa keluar gambar kota kuala lumpur gt gmn ya?
mas untuk mengambil nilai combo box yang ke dua bagaimana caranya?
kalau untuk ambil yang pertama pada event OnClick kan tinggal memakai
Toast.makeText(this, “Anda Memilih: ” + negara[position],Toast.LENGTH_LONG).show();
seperti yang anda ajarkan pada tutorial sebelum ini
jika saya mau mengambil nilai kota bagaimana untuk kasus seperti ini?
thanks
sudah bisa mas
pakai
switch (parent.getId()) {
case R.id.spinner1:
break;
case R.id.spinner2:
break;
}
hashmap bisa buat 3 spinner/lebih gak??
spinner1>spinner2>spinner3
mas masih belum ngerti cara mengambil nilai kotanya?
yang di maksud saudara jimmy bisa tolong di jelaskan biar saya mengerti..
@agungp, tentu bisa tinggal kita buat hashmap untuk spinner lainnya, misalnya kita tambahkan satu combobox untuk menampilkan tempat wisata yang ada di kota tersebut, kita tinggal buah sebuah hashmap lagi dengan kota sebagai keynya, dan tempat tempat wisata sebagai datanya
masih bingung ama hashmap :hammer:
jadi method yang harus ditambah kalo nambah spinner apaan aja??
@jimmy
lanjutan
switch (parent.getId()) {
case R.id.spinner1:
break;
case R.id.spinner2:
break;
}
gmn boss?
saya nyoba buat ambil datanya kota, tapi yang terambil selalu yang array pertama dalam list 🙁
gmn caranya untuk ambil posisi saat spinner2 nunjuk ke kota tertentu?
masih newbie nihh 😀
salam kenal mas agus,
maaf, saya mau tanya sedikit ni,,,
aplikasi diatas kn pemanggilan datanya dari source code.. (data nama negara&kotanya), Klo semisal memanggil data tp tersimpan di database itu methodnya ky gmn ya mas?
mas mau tanya..kalo seandainya isi combo boxnya diambil dari database kita gimana ya mas??mohon replynya
makasih
boleh tanya pak agus.
bagaimana mengambil data spinner 1 dan spinner 2 ya?
trims.
trimakasih atas ilmux sangat bermanfaat
klo mau bikin 3 spinner tuh apa jah sii mas point2 penting yg harus di perhatiinnya??
jadi spinner 2 bergantung dgn spinner 1,trus spinner 3 bergantung ke spinner 2..
mohon solusinya mas
iya mas gimama caranya klo kita ambil dari database plss mas kasi tutorialnya .. hehe
makasi sebelumnya mas .. udah mau berbagi
Klo combobox di android, valuenya adlh text yg ditampilkan ya om, klo di php value beda dgn tampilancombo
Terima kasih pak, SUdah work disaya. Ijin saya pakai dan rombak. 🙂
tapi pak, saya mau tanya, ini dapet dari mana ya? Soalnya di file xml yang bapak kasih, tidak ada layout ini. Terima kasih
pict: http://snag.gy/Cuyhi.jpg
kalau saya ingin mendapatkan value nya dari json gimana ya pak?
pak, sy mau nanya, kalau kita mau membuat tampilan layout tanpa menyentuh xml, bisa gak?
dan hanya menggunakan java untuk membuat tampilan, seperti membuat tombol button
mohon respon nya pak.. 🙂
thank’s