Thursday, May 10, 2012

Belajar Android - Membuat ComboBox Dinamis

             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. 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
01<?xml version="1.0" encoding="utf-8"?>
02<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
03    android:orientation="vertical" android:layout_width="fill_parent"
04    android:layout_height="fill_parent">
05    <TextView android:text="Negara :" android:id="@+id/selection_country" android:layout_width="fill_parent"
06        android:layout_height="wrap_content" />
07    <Spinner android:id="@+id/spinner_country" android:layout_width="fill_parent"
08        android:layout_height="wrap_content" android:drawSelectorOnTop="true" />
09    <TextView android:text="kota :" android:id="@+id/selection_city" android:layout_width="fill_parent"
10        android:layout_height="wrap_content" />
11    <Spinner android:id="@+id/spinner_city" android:layout_width="fill_parent"
12        android:layout_height="wrap_content" android:drawSelectorOnTop="true" />
13</LinearLayout>

Pada main.xml diatas kita menambahkan satu spinner lagi  untuk combobox kota

3.  Edit File CreateComboBox.java lalau isi dengan code dibawah ini
01package com.agus.combobox;
02
03import java.util.HashMap;
04
05import android.app.Activity;
06import android.os.Bundle;
07import android.view.View;
08import android.widget.AdapterView;
09import android.widget.ArrayAdapter;
10import android.widget.Spinner;
11import android.widget.TextView;
12import android.widget.Toast;
13
14public class CreateComboBox extends Activity implements AdapterView.OnItemSelectedListener {
15    TextView selection_country;
16    TextView selection_city;
17    Spinner spin_city;
18    String[] negara = { "Amerika", "Argentina", "Brazil", "Indonesia",
19            "Inggris", "Malaysia", "Pilipina" };
20    HashMap<String, String []> hash_negara = new HashMap<String, String []>();
21
22    @Override
23    public void onCreate(Bundle icicle) {
24       super.onCreate(icicle);
25       generateData();
26       setContentView(R.layout.main);
27       selection_country = (TextView) findViewById(R.id.selection_country);
28       Spinner spin = (Spinner) findViewById(R.id.spinner_country);
29       spin.setOnItemSelectedListener(this);
30       ArrayAdapter<String> aa = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, negara);
31       aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
32        spin.setAdapter(aa);
33        spin_city = (Spinner) findViewById(R.id.spinner_city);
34
35    }
36
37    public void onItemSelected(AdapterView<?> parent, View v, int position,   long id) {
38        fillComboKota(negara[position]);
39    }
40
41    public void onNothingSelected(AdapterView<?> parent) {
42   Toast.makeText(this, "Silahkan Pilih Negara", Toast.LENGTH_LONG).show();
43    }
44
45    private void generateData(){
46        hash_negara.put("Amerika", new String[] {"Chicago","Los Angeles","Newyork"});
47        hash_negara.put("Indonesia", new String[] {"Bandung","Jakarta","Surabaya"});
48        hash_negara.put("Malaysia", new String[] {"Kuala Lumpur","Selangor","Serawak"});
49    }
50    private void fillComboKota(String snegara){
51        String[] kota = null;
52        ArrayAdapter<String> aa = null;
53        try {
54            kota = hash_negara.get(snegara);
55            aa = new ArrayAdapter<String>(this,
56                    android.R.layout.simple_spinner_item, kota);
57        } catch (NullPointerException e) {
58            aa = new ArrayAdapter<String>(this,
59                    android.R.layout.simple_spinner_item, new String[] {});
60        }
61       aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
62      spin_city.setAdapter(aa);
63    }
64
65}
        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.
1    private void generateData(){
2    hash_negara.put("Amerika", new String[] {"Chicago","Los Angeles","Newyork"});
3    hash_negara.put("Indonesia", new String[] {"Bandung","Jakarta","Surabaya"});
4    hash_negara.put("Malaysia", new String[] {"Kuala Lumpur","Selangor","Serawak"});
5}
         Sekarang bagaimana cara untuk mengisi ComboBox Kota agar isinya sesuai dengan Negara yang dipilih.
Perhatikan method fillComboKota
01private void fillComboKota(String snegara){
02        String[] kota = null;
03        ArrayAdapter<String> aa = null;
04        try {
05            kota = hash_negara.get(snegara);
06            aa = new ArrayAdapter<String>(this,
07                    android.R.layout.simple_spinner_item, kota);
08        } catch (NullPointerException e) {
09            aa = new ArrayAdapter<String>(this,
10                    android.R.layout.simple_spinner_item, new String[] {});
11        }
12       aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
13        spin_city.setAdapter(aa);
14    }
15
16}
     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

No comments:

Post a Comment