Minggu, 09 Februari 2014

Android Dynamic ExpandableListView Menggunakan Array String Dinamis

Android Dynamic ExpandableListView Menggunakan Array String Dinamis
Android Dynamic ExpandableListView Menggunakan Array String Dinamis digunakan saat kita ingin membuat ListView bersarang di Android , atau ListView yang mempunyai anak baris di aplikasi Android. Sehingga ada baris judul (parent) dan ada baris isi (child). Keunggulan Expandable ListView ini adalah ListView bisa menutup sehingga hanya kelihatan baris judul nya saja. Tentu saja hal ini akan menghemat tempat.

Caranya pertama kita buat Project Android baru di Eclipse. Kemudian di MainActivity.java silakan masukkan kode program berikut ini :



package com.amijaya.dynamic_expandablelistview_from_string_array;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.SimpleExpandableListAdapter;
import android.widget.Toast;

public class MainActivity extends Activity {

// http://cariprogram.blogspot.com
// nuramijaya@gmail.com

private ExpandableListAdapter mAdapter;
ExpandableListView expandableListView1;

String[] arrParent = {"Consumer", "Mining", "Pharmacy"};
String[][] arrChild = {{"Unilever", "Mayora Indah", "Ultrajaya Milk"}, {"Bukit Asam", "Adaro Energy"}, {"Kalbe Farma", "Tempo Scan Pacific", "Indofarma", "Kimia Farma"}};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

expandableListView1 = (ExpandableListView)findViewById(R.id.expandableListView1);

List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();

for (int i=0;i<arrChild.length;i++)
{
/* ******************** Start Group  ********************* */
Map<String, String> curgroupMap1 = new HashMap<String, String>();
groupData.add(curgroupMap1);
curgroupMap1.put("parent", arrParent[i]);

List<Map<String,String>> children1 =new ArrayList<Map<String,String>>();

for (int j=0;j<arrChild[i].length;j++)
{
/* *** ChildData ***/
Map<String, String> curChildMap1 = new HashMap<String, String>();
children1.add(curChildMap1);
curChildMap1.put("child", " - " + arrChild[i][j]);
}

childData.add(children1);
/* *************************End Group **************************/
}

mAdapter = new SimpleExpandableListAdapter(
           this,
           groupData,
           android.R.layout.simple_expandable_list_item_1,
           new String[] { "parent" },
           new int[] { android.R.id.text1, android.R.id.text2 },
           childData,
           android.R.layout.simple_expandable_list_item_2,
           new String[] {"child"},
           new int[] { android.R.id.text1 }
           );
//expandableListView1.setListAdapter(mAdapter);
expandableListView1.setAdapter(mAdapter);

//expandableListView1 = getExpandableListView();
 
expandableListView1.setOnChildClickListener(new OnChildClickListener() {

@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub

Toast.makeText(getBaseContext(), "Parent : " + arrParent[groupPosition] + ", Child : " + arrChild[groupPosition][childPosition],
Toast.LENGTH_SHORT).show();

return false;
}
});
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

}

Pada desain tampilan pada file activity_main.xml, tambahkan satu buah EpandableListView sebagai berikut :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <ExpandableListView
        android:id="@+id/expandableListView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ExpandableListView>

</LinearLayout>

Konfigurasi di AndroidManifest.xml tidak perlu dirubah :

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.amijaya.dynamic_expandablelistview_from_string_array"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="16" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.amijaya.dynamic_expandablelistview_from_string_array.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

Hasilnya ketika akan tampil ExpandableListView yang berisi judul, kemudian jika diklik salah satu judul maka akan Expand dan tampil baris isi (child) di bawahnya. Jika diklik judul (parent) nya lagi maka akan menutup lagi. ExpandableListView juga dapat discroll seperti List View biasa.

Android Dynamic ExpandableListView Menggunakan Array String Dinamis


File project selengkapnya dapat anda download disini. Jika bingung cara download, silakan lihat caranya disini.

Semoga berguna ^_^






3 komentar:

  1. om mau tanya dong, kalo childnya di klik trus pindah activity gimna ya codingannya, itu kan kalo di klik cuma "Toast.makeText" nah ini saya mau bikin kalo klik childnya biar bisa pindah activity om. gimana?

    BalasHapus
  2. mau tanya, kalo childnya ngedirect link dri browser gimana ya?

    BalasHapus
  3. R.menu. itu kok error ya, knpa om?

    BalasHapus