Belajar Android – Membuat ComboBox Dinamis

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.

  1. Buka kembali project BelajarCombobox
  2. 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

27 comments to Belajar Android – Membuat ComboBox Dinamis

  • 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 🙂

  • Agus Haryanto

    @sutadi, ia habis belum ada yang jawab, yah tak jawab sendiri aja 🙂

  • xxx

    bagaimana jika datanya diambil dari database.
    kan g mungkin kl 1 negara cuman sedikit kotanya.. jd harus pake database..

  • chandra

    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

  • dana

    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;
    }

  • agungp

    hashmap bisa buat 3 spinner/lebih gak??

    spinner1>spinner2>spinner3

  • frans

    mas masih belum ngerti cara mengambil nilai kotanya?
    yang di maksud saudara jimmy bisa tolong di jelaskan biar saya mengerti..

  • Agus Haryanto

    @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

  • agungp

    masih bingung ama hashmap :hammer:

    jadi method yang harus ditambah kalo nambah spinner apaan aja??

  • NeL05

    @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?

  • Baskoro

    mas mau tanya..kalo seandainya isi combo boxnya diambil dari database kita gimana ya mas??mohon replynya
    makasih

  • nikko

    boleh tanya pak agus.
    bagaimana mengambil data spinner 1 dan spinner 2 ya?

    trims.

  • trimakasih atas ilmux sangat bermanfaat

  • rzq

    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

  • Angga

    kalau saya ingin mendapatkan value nya dari json gimana ya pak?

  • adi

    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

Leave a Reply

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>