Feb 24, 2014

Detect user action on ExpandableListView, with various Listeners

This example implement various Listeners (OnChildClickListener, OnGroupClickListener, OnGroupCollapseListener and OnGroupExpandListener) to monitor user click on ExpandableListView.

ExpandableListView with Listeners
ExpandableListView with Listeners
MainActivity.java
package com.example.androidexpandablelistview;

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

import android.os.Bundle;
import android.app.Activity;
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.TextView;

public class MainActivity extends Activity {
 
 MyBaseExpandableListAdapter myBaseExpandableListAdapter;
    ExpandableListView myExpandableListView;
    List<String> myListForGroup;
    HashMap<String, List<String>> myMapForChild;
 
    TextView info;
    
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  
  info = (TextView)findViewById(R.id.info);
  
  myExpandableListView = (ExpandableListView)
    findViewById(R.id.myexpandablelistview);
 
        initData();
 
        myBaseExpandableListAdapter = new 
          MyBaseExpandableListAdapter(this, myListForGroup, myMapForChild);
 
        myExpandableListView.setAdapter(myBaseExpandableListAdapter);
        
        myExpandableListView.setOnChildClickListener(myOnChildClickListener);
        myExpandableListView.setOnGroupClickListener(myOnGroupClickListener);
        myExpandableListView.setOnGroupCollapseListener(myOnGroupCollapseListener);
        myExpandableListView.setOnGroupExpandListener(myOnGroupExpandListener);
 }
 
 private void initData() {
  myListForGroup = new ArrayList<String>();
  myMapForChild = new HashMap<String, List<String>>();

        List<String> listGroupA = new ArrayList<String>();
        listGroupA.add("A - 1");
        listGroupA.add("A - 2");
        listGroupA.add("A - 3");

        List<String> listGroupB = new ArrayList<String>();
        listGroupB.add("B - 1");
 
        List<String> listGroupC = new ArrayList<String>();
        listGroupC.add("C - 1");
        listGroupC.add("C - 2");
        
        myListForGroup.add("Group A");
        myListForGroup.add("Group B");
        myListForGroup.add("Group C");
        
        myMapForChild.put(myListForGroup.get(0), listGroupA);
        myMapForChild.put(myListForGroup.get(1), listGroupB);
        myMapForChild.put(myListForGroup.get(2), listGroupC);
    }
 
 OnChildClickListener myOnChildClickListener =
  new OnChildClickListener(){

   @Override
   public boolean onChildClick(ExpandableListView parent, 
    View v, int groupPosition, int childPosition, long id) {
    String strChild = (String)myBaseExpandableListAdapter
      .getChild(groupPosition, childPosition);
    info.setText("child clicked: " + strChild);
    return true;
   }};
   
 OnGroupClickListener myOnGroupClickListener =
  new OnGroupClickListener(){

   @Override
   public boolean onGroupClick(ExpandableListView parent, 
     View v, int groupPosition, long id) {
    String strGroup = (String)myBaseExpandableListAdapter
      .getGroup(groupPosition);
    info.setText("group clicked: " + strGroup);
    
    return false;
    //return false
    //otherwise, group will not expand when user click on it
   }};
  
 OnGroupCollapseListener myOnGroupCollapseListener =
  new OnGroupCollapseListener(){

   @Override
   public void onGroupCollapse(int groupPosition) {
    info.setText("group collapse: " + groupPosition);
   }};
   
 OnGroupExpandListener myOnGroupExpandListener =
  new OnGroupExpandListener(){

   @Override
   public void onGroupExpand(int groupPosition) {
    info.setText("group expand: " + groupPosition);
   }};

}

/res/layout/activity_main.xml, modify to add a TextView to display info.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="android-coding.blogspot.com"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/info"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    
    <ExpandableListView
        android:id="@+id/myexpandablelistview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

For other files, MyBaseExpandableListAdapter.java, group_layout.xml and item_layout.xml, refer to ExpandableListView example.

Next:
- ExpandableListView with icon

No comments:

Post a Comment

Infolinks In Text Ads