Android Expandable List View Tutorial

download Android Expandable List View Tutorial

of 15

description

Android Expandable List View

Transcript of Android Expandable List View Tutorial

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 1/15

    74 Comments Tweet 12

    advertise here

    July 27, 2013 08:32 PM

    Android Expandable List View Tutorial

    Expandable list view is used to group list data by

    categories. It has the capability of expanding and

    collapsing the groups when user touches header.

    If you are not aware of list view before please refer to this

    tutorial Android ListView Tutorial

    274Like 1

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 2/15

    Lets start by creating a new project..

    1. Create a new project in the Eclipse IDE from File Android Application Project and fill all required

    details. I left my main activity name as M ainA ct iv it y. ja va

    2. In order to create an expandable list view, we need three xml layout files. First one is for main listview,

    2nd one for list view group item and 3rd one is for list view child item. Open your a ct iv it y_ma in .xml

    and add Expan da bleL istVie w element.

    3. Create another xml layout for list view group header. I created an xml file named l ist_grou p.xml

    and pasted following code.

    activity_main.xml

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 3/15

    4.Create one more xml file named l ist_ it em.xml for child list item. This will contain simple TextView

    element.

    5. I am using a custom adapter class to create list view. Create a new class file called

    Expan da bleL istA da pt er.jav a and extend this from B aseExpan da bleL istA da pt er . This class

    provides required methods to render listview.

    get Grou pVie w( ) Returns view for the list group header

    get Ch ildVie w( ) Returns view for list child item

    list_group.xml

    list_item.xml

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 4/15

    import android.content.Context;import android.graphics.Typeface;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseExpandableListAdapter;import android.widget.TextView; public class ExpandableListAdapter extends BaseExpandableListAdapter { private Context _context; private List _listDataHeader; // header titles // child data in format of header title, child title private HashMap _listDataChild; public ExpandableListAdapter(Context context, List listDataHeader, HashMap listChildData) { this._context = context; this._listDataHeader = listDataHeader; this._listDataChild = listChildData; } @Override public Object getChild(int groupPosition, int childPosititon) { return this._listDataChild.get(this._listDataHeader.get(groupPosition)) .get(childPosititon); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { final String childText = (String) getChild(groupPosition, childPosition); if (convertView == null) { LayoutInflater infalInflater = (LayoutInflater) this._context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = infalInflater.inflate(R.layout.list_item, null); } TextView txtListChild = (TextView) convertView .findViewById(R.id.lblListItem); txtListChild.setText(childText); return convertView; } @Override public int getChildrenCount(int groupPosition) { return this._listDataChild.get(this._listDataHeader.get(groupPosition)) .size(); } @Override public Object getGroup(int groupPosition) { return this._listDataHeader.get(groupPosition); } @Override public int getGroupCount() { return this._listDataHeader.size();

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 5/15

    6. Once you are done with customer adapter, open your M ainA ct iv it y. ja va and do the following

    changes. In the following I created required data needed for list view and passed it to custom adapter.

    } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { String headerTitle = (String) getGroup(groupPosition); if (convertView == null) { LayoutInflater infalInflater = (LayoutInflater) this._context .getSystemService(Context.LAYOUT_INFLATER_SERVICE); convertView = infalInflater.inflate(R.layout.list_group, null); } TextView lblListHeader = (TextView) convertView .findViewById(R.id.lblListHeader); lblListHeader.setTypeface(null, Typeface.BOLD); lblListHeader.setText(headerTitle); return convertView; } @Override public boolean hasStableIds() { return false; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; }}

    MainActivity.java

    package info.androidhive.expandablelistview; import java.util.ArrayList;import java.util.HashMap;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.ExpandableListView;import android.widget.ExpandableListView.OnChildClickListener;import android.widget.ExpandableListView.OnGroupClickListener;import android.widget.ExpandableListView.OnGroupCollapseListener;import android.widget.ExpandableListView.OnGroupExpandListener;import android.widget.Toast; public class MainActivity extends Activity { ExpandableListAdapter listAdapter; ExpandableListView expListView; List listDataHeader;

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 6/15

    HashMap listDataChild; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // get the listview expListView = (ExpandableListView) findViewById(R.id.lvExp); // preparing list data prepareListData(); listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild); // setting list adapter expListView.setAdapter(listAdapter); } /* * Preparing the list data */ private void prepareListData() { listDataHeader = new ArrayList(); listDataChild = new HashMap(); // Adding child data listDataHeader.add("Top 250"); listDataHeader.add("Now Showing"); listDataHeader.add("Coming Soon.."); // Adding child data List top250 = new ArrayList(); top250.add("The Shawshank Redemption"); top250.add("The Godfather"); top250.add("The Godfather: Part II"); top250.add("Pulp Fiction"); top250.add("The Good, the Bad and the Ugly"); top250.add("The Dark Knight"); top250.add("12 Angry Men"); List nowShowing = new ArrayList(); nowShowing.add("The Conjuring"); nowShowing.add("Despicable Me 2"); nowShowing.add("Turbo"); nowShowing.add("Grown Ups 2"); nowShowing.add("Red 2"); nowShowing.add("The Wolverine"); List comingSoon = new ArrayList(); comingSoon.add("2 Guns"); comingSoon.add("The Smurfs 2"); comingSoon.add("The Spectacular Now"); comingSoon.add("The Canyons"); comingSoon.add("Europa Report"); listDataChild.put(listDataHeader.get(0), top250); // Header, Child data listDataChild.put(listDataHeader.get(1), nowShowing); listDataChild.put(listDataHeader.get(2), comingSoon); }}

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 7/15

    Run your project, you should see following output. (Note: The list view group indicators might change

    depending upon your android version)

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 8/15

    ListView child item click listener

    Detecting the child item click can be done by implementing set On Ch ildC lick List en er listener on

    listview.

    Listening when group is expanded

    You may want to execute some lines of code when the listview group is expanded. For this you can use

    set On Grou pExpan dListe ne r which triggers an event when listview group expanded.

    Listening when group is collapsed

    // Listview on child click listener expListView.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { Toast.makeText( getApplicationContext(), listDataHeader.get(groupPosition) + " : " + listDataChild.get( listDataHeader.get(groupPosition)).get( childPosition), Toast.LENGTH_SHORT) .show(); return false; } });

    // Listview Group expanded listenerexpListView.setOnGroupExpandListener(new OnGroupExpandListener() { @Override public void onGroupExpand(int groupPosition) { Toast.makeText(getApplicationContext(), listDataHeader.get(groupPosition) + " Expanded", Toast.LENGTH_SHORT).show(); }});

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 9/15

    Implementing set On Grou pC ol la pseL iste ne r will trigger an event when listview group is collapsed.

    Complete Code

    Here is the final code for M ainA ct iv it y. ja va

    // Listview Group collasped listenerexpListView.setOnGroupCollapseListener(new OnGroupCollapseListener() { @Override public void onGroupCollapse(int groupPosition) { Toast.makeText(getApplicationContext(), listDataHeader.get(groupPosition) + " Collapsed", Toast.LENGTH_SHORT).show(); }});

    MainActivity.java

    package info.androidhive.expandablelistview; import java.util.ArrayList;import java.util.HashMap;import java.util.List;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.ExpandableListView;import android.widget.ExpandableListView.OnChildClickListener;import android.widget.ExpandableListView.OnGroupClickListener;import android.widget.ExpandableListView.OnGroupCollapseListener;import android.widget.ExpandableListView.OnGroupExpandListener;import android.widget.Toast; public class MainActivity extends Activity { ExpandableListAdapter listAdapter; ExpandableListView expListView; List listDataHeader; HashMap listDataChild; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // get the listview expListView = (ExpandableListView) findViewById(R.id.lvExp); // preparing list data prepareListData(); listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild); // setting list adapter

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 10/15

    expListView.setAdapter(listAdapter); // Listview Group click listener expListView.setOnGroupClickListener(new OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { // Toast.makeText(getApplicationContext(), // "Group Clicked " + listDataHeader.get(groupPosition), // Toast.LENGTH_SHORT).show(); return false; } }); // Listview Group expanded listener expListView.setOnGroupExpandListener(new OnGroupExpandListener() { @Override public void onGroupExpand(int groupPosition) { Toast.makeText(getApplicationContext(), listDataHeader.get(groupPosition) + " Expanded", Toast.LENGTH_SHORT).show(); } }); // Listview Group collasped listener expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() { @Override public void onGroupCollapse(int groupPosition) { Toast.makeText(getApplicationContext(), listDataHeader.get(groupPosition) + " Collapsed", Toast.LENGTH_SHORT).show(); } }); // Listview on child click listener expListView.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { // TODO Auto-generated method stub Toast.makeText( getApplicationContext(), listDataHeader.get(groupPosition) + " : " + listDataChild.get( listDataHeader.get(groupPosition)).get( childPosition), Toast.LENGTH_SHORT) .show(); return false; } }); } /* * Preparing the list data */ private void prepareListData() { listDataHeader = new ArrayList(); listDataChild = new HashMap(); // Adding child data

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 11/15

    Tweet

    12 19

    Share this article on

    Report a Bug in this article

    (If you find any error either in code or content please help me in improvising the content)

    Email address / Full name

    listDataHeader.add("Top 250"); listDataHeader.add("Now Showing"); listDataHeader.add("Coming Soon.."); // Adding child data List top250 = new ArrayList(); top250.add("The Shawshank Redemption"); top250.add("The Godfather"); top250.add("The Godfather: Part II"); top250.add("Pulp Fiction"); top250.add("The Good, the Bad and the Ugly"); top250.add("The Dark Knight"); top250.add("12 Angry Men"); List nowShowing = new ArrayList(); nowShowing.add("The Conjuring"); nowShowing.add("Despicable Me 2"); nowShowing.add("Turbo"); nowShowing.add("Grown Ups 2"); nowShowing.add("Red 2"); nowShowing.add("The Wolverine"); List comingSoon = new ArrayList(); comingSoon.add("2 Guns"); comingSoon.add("The Smurfs 2"); comingSoon.add("The Spectacular Now"); comingSoon.add("The Canyons"); comingSoon.add("Europa Report"); listDataChild.put(listDataHeader.get(0), top250); // Header, Child data listDataChild.put(listDataHeader.get(1), nowShowing); listDataChild.put(listDataHeader.get(2), comingSoon); }}

    274

    Like

    1

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 12/15

    Tweet 404 1k

    Enter your email here SUBSCRIBE

    Subscribe for latest updates 127121

    Advertise Here Advertise Here

    Follow @RaviTamada 2,190 follow ers

    Advertise

    Give brief description about the bug...

    Report

    13kLike

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 13/15

    Act ion Bar Adapter Animation Apps

    Async Beginner Camera Dashboard

    Database facebook Fragments GCM

    Gestures Google GPS Grid HTTP

    Intermediate json List View Maps

    MySQL Navigat ion Drawer PHP Pinch

    Quick Tips sessions Spinner SQLite

    Swipe Tab View Twitter UI Video

    View Pager xml

    advertise here

    Tag Cloud

    AndroidHive

    13,755 people like AndroidHive.

    Facebook social plugin

    Like

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 14/15

    Ravi Tamadagoogle.com/+RaviTamada

    2,146 followers

    Follow

    MOST POPULAR

    1 Android SQLite Database

    Tutorial - 597,334 views

    2 Android Custom ListView with

    Image and Text - 485,578 views

    3 Android JSON Parsing Tutorial -

    472,880 views

    4 How to connect Android with

    PHP, MySQL - 449,953 views

    5 Android Push Notifications

    using Google Cloud Messaging

    (GCM), PHP and MySQL -

    362,573 views

    NETWORK

    DESIGNd e s i g n . a n d r o i d h i v e . i n f o

    TIPSt i p s . a n d r o i d h i v e . i n f o

    ERRORSe r r o r s . a n d r o i d h i v e . i n f o

    DOWNLOADd o w n l o a d . a n d r o i d h i v e . i n f o

  • 1/9/14 Android Expandable List View Tutorial

    www.androidhive.info/2013/07/android-expandable-list-view-tutorial/ 15/15

    Advertise | Privacy Policy | Terms & Conditions 2014 AndroidHive | All Rights Reserved

    6 Android Login and Registration

    with PHP, MySQL and SQLite -

    327,255 views

    7 Android Tab Layout Tutorial -

    322,494 views

    8 Android XML Parsing Tutorial -

    251,797 views

    9 Android Login and Registration

    Screen Design - 242,197 views

    10 Android ListView Tutorial -

    223,407 views

    127121subscribers

    & 1035639downloads

    REQUEST TUTORIAL

    Email / Name *

    Your email id or name

    Description *

    Brief description about your

    thought. (Please don't spam)

    SENDCreative Commons Attribution 3.0

    Unported License

    .