Skip to main content

Expandable Listview Android example



Create New Android Project In Main Activity :

 package com.multilayerexpandable;  
 import java.util.ArrayList;  
 import android.app.ExpandableListActivity;  
 import android.content.Context;  
 import android.os.Bundle;  
 import android.view.LayoutInflater;  
 import android.view.View;  
 import android.widget.ExpandableListView;  
 import android.widget.ExpandableListView.OnChildClickListener;  
 import android.widget.Toast;  
 public class MainActivity extends ExpandableListActivity implements  
           OnChildClickListener {  
      @Override  
      public void onCreate(Bundle savedInstanceState) {  
           super.onCreate(savedInstanceState);  
           ExpandableListView expandbleLis = getExpandableListView();  
           expandbleLis.setDividerHeight(2);  
           expandbleLis.setGroupIndicator(null);  
           expandbleLis.setClickable(true);  
           setGroupData();  
           setChildGroupData();  
           NewAdapter mNewAdapter = new NewAdapter(groupItem, childItem);  
           mNewAdapter  
                     .setInflater(  
                               (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE),  
                               this);  
           getExpandableListView().setAdapter(mNewAdapter);  
           expandbleLis.setOnChildClickListener(this);  
      }  
      public void setGroupData() {  
           groupItem.add("Android");  
           groupItem.add("Extras");  
      }  
      ArrayList<String> groupItem = new ArrayList<String>();  
      ArrayList<Object> childItem = new ArrayList<Object>();  
      public void setChildGroupData() {  
           /**  
            * Add Data For Android 
            */  
           ArrayList<String> child = new ArrayList<String>();  
           child.add("Cupcake");  
           child.add("Donut");  
           child.add("Eclair");  
           child.add("Froyo");  
           child.add("Gingerbread");  
           child.add("Honeycomb");  
           child.add("Ice Cream Sandwich");  
           child.add("Jelly Bean");  
           childItem.add(child);  
           /**  
            * Add Data For Extras_  
            */  
           child = new ArrayList<String>();  
           child.add("Dj-Android");  
           child.add("Dhaval Sodha Parmar");  
           childItem.add(child);  
      }  
      @Override  
      public boolean onChildClick(ExpandableListView parent, View v,  
                int groupPosition, int childPosition, long id) {  
           Toast.makeText(MainActivity.this, "Clicked On Child",  
                     Toast.LENGTH_SHORT).show();  
           return true;  
      }  
 }  

Class NewAdapter.java

 package com.multilayerexpandable;  
 import java.util.ArrayList;  
 import android.app.Activity;  
 import android.view.LayoutInflater;  
 import android.view.View;  
 import android.view.View.OnClickListener;  
 import android.view.ViewGroup;  
 import android.widget.BaseExpandableListAdapter;  
 import android.widget.CheckedTextView;  
 import android.widget.ImageView;  
 import android.widget.TextView;  
 import android.widget.Toast;  
 @SuppressWarnings("unchecked")  
 public class NewAdapter extends BaseExpandableListAdapter {  
      public ArrayList<String> groupItem, tempChild;  
      public ArrayList<Object> Childtem = new ArrayList<Object>();  
      public LayoutInflater minflater;  
      public Activity activity;  
      public NewAdapter(ArrayList<String> grList, ArrayList<Object> childItem) {  
           groupItem = grList;  
           this.Childtem = childItem;  
      }  
      public void setInflater(LayoutInflater mInflater, Activity act) {  
           this.minflater = mInflater;  
           activity = act;  
      }  
      @Override  
      public Object getChild(int groupPosition, int childPosition) {  
           return null;  
      }  
      @Override  
      public long getChildId(int groupPosition, int childPosition) {  
           return 0;  
      }  
      @Override  
      public View getChildView(int groupPosition, final int childPosition,  
                boolean isLastChild, View convertView, ViewGroup parent) {  
           tempChild = (ArrayList<String>) Childtem.get(groupPosition);  
           TextView text = null;  
           ImageView img = null;  
           if (convertView == null) {  
                convertView = minflater.inflate(R.layout.childrow, null);  
           }  
           text = (TextView) convertView.findViewById(R.id.textView1);  
           img = (ImageView) convertView.findViewById(R.id.childImage);  
           text.setText(tempChild.get(childPosition));  
           if (childPosition == (tempChild.size() - 1)) {  
                img.setImageResource(R.drawable.dh);  
           }  
           if (childPosition == tempChild.size()) {  
                img.setImageResource(R.drawable.dj);  
           }  
           convertView.setOnClickListener(new OnClickListener() {  
                @Override  
                public void onClick(View v) {  
                     Toast.makeText(activity, tempChild.get(childPosition),  
                               Toast.LENGTH_SHORT).show();  
                }  
           });  
           return convertView;  
      }  
      @Override  
      public int getChildrenCount(int groupPosition) {  
           return ((ArrayList<String>) Childtem.get(groupPosition)).size();  
      }  
      @Override  
      public Object getGroup(int groupPosition) {  
           return null;  
      }  
      @Override  
      public int getGroupCount() {  
           return groupItem.size();  
      }  
      @Override  
      public void onGroupCollapsed(int groupPosition) {  
           super.onGroupCollapsed(groupPosition);  
      }  
      @Override  
      public void onGroupExpanded(int groupPosition) {  
           super.onGroupExpanded(groupPosition);  
      }  
      @Override  
      public long getGroupId(int groupPosition) {  
           return 0;  
      }  
      @Override  
      public View getGroupView(int groupPosition, boolean isExpanded,  
                View convertView, ViewGroup parent) {  
           if (convertView == null) {  
                convertView = minflater.inflate(R.layout.grouprow, null);  
           }  
           ((CheckedTextView) convertView).setText(groupItem.get(groupPosition));  
           ((CheckedTextView) convertView).setChecked(isExpanded);  
           return convertView;  
      }  
      @Override  
      public boolean hasStableIds() {  
           return false;  
      }  
      @Override  
      public boolean isChildSelectable(int groupPosition, int childPosition) {  
           return false;  
      }  
 }  

Grouprow.xml


 <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"  
   xmlns:tools="http://schemas.android.com/tools"  
   android:id="@+id/textView1"  
   android:layout_width="wrap_content"  
   android:layout_height="60dp"  
   android:layout_marginLeft="5dp"  
   android:gravity="center_vertical"  
   android:padding="10dp"  
   android:text="@string/hello_world"  
   android:textColor="#FFFFFF"  
   android:textSelectHandleLeft="@string/hello_world"  
   android:textSize="14sp"  
   android:textStyle="bold" />  

childrow.xml

 <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="40dp"  
   android:background="@android:color/black"  
   android:clickable="true"  
   android:orientation="vertical"  
   android:paddingLeft="40dp"  
   tools:context=".MainActivity" >  
   <LinearLayout  
     android:layout_width="match_parent"  
     android:layout_height="39dp"  
     android:gravity="center_vertical" >  
     <ImageView  
       android:id="@+id/childImage"  
       android:layout_width="30dp"  
       android:layout_height="30dp"  
       android:layout_margin="5dp"  
       android:background="@drawable/ic_launcher"  
       android:contentDescription="@string/hello_world" />  
     <TextView  
       android:id="@+id/textView1"  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:layout_marginLeft="5dp"  
       android:text="@string/hello_world"  
       android:textColor="#FFFFFF"  
       android:textSize="14sp"  
       android:textStyle="bold" />  
   </LinearLayout>  
 </LinearLayout>  

Android Manifest file :

 <?xml version="1.0" encoding="utf-8"?>  
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"  
   package="com.multilayerexpandable"  
   android:versionCode="1"  
   android:versionName="1.0" >  
   <uses-sdk  
     android:minSdkVersion="8"  
     android:targetSdkVersion="16" />  
   <application  
     android:allowBackup="true"  
     android:icon="@drawable/ic_launcher"  
     android:label="@string/app_name"  
     android:theme="@style/AppTheme" >  
     <activity  
       android:theme="@android:style/Theme.NoTitleBar"  
       android:name="com.multilayerexpandable.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>  

Comments

  1. This code is working first time when i click on group but when i click on second group it shows abnormal behaviour as image appear in both group in different position.

    ReplyDelete
  2. There is no Toast showing in my code.
    Can you help me with that?
    Thanks

    ReplyDelete
    Replies
    1. you get any error??? if yes tem Past its below, if any other issue then show me you code

      Delete

Post a Comment

Popular posts from this blog

Don't Ship AI Agent Skills Without Evals

At the AI Engineer World's Fair on July 1, 2026, Philipp Schmid, a Staff Engineer on the Gemini API and agents team at Google DeepMind, asked a room full of engineers a simple question: who uses skills with their coding agents? Every hand went up. Who has evals for those skills? Almost none. That gap is the entire talk, which Schmid also wrote up on his own blog, philschmid.de/testing-skills . His team indexed the skills ecosystem through SkillsBench and found the same pattern everywhere: people ship a SKILL.md file after two manual test runs and move on. It looks fine in a demo. It quietly corrupts outputs in production, because bad skills don't crash. They just make the agent confidently wrong. If you've already read our breakdown of Matt Pocock's Claude Code skills library , think of this as the other half of that story: what happens once you've installed a skill and it's actually running against real prompts. Key Takeaways SkillsBench indexed 47,000+ un...

Add flutter to existing app — Challenges

I am using flutter last 2 year & successfully released 2 flutter apps on production before 2–3 month, decide to add flutter in existing android & iOS app(while it was in beta-experimental stage). Flutter team have provide better way to add same in flutter v1.2 —  Good document than beta. Article is not about integrate flutter in existing app but, It’s about challenges which i have faced after adding flutter in existing app. I have integrate flutter module with my existing iOS & Android App (Same Application for both platform), developed 2 new features in flutter module & released successfully. In last week I have to add new feature in flutter module which user is able to pick file from phone & upload it on server. I have decided to use  file_picker: ^1.4.3+2 . Now, what I have is Native Application + Flutter Module < = > Image_picker Plugin in one App. In which I faced below challenges. Same time flutter v1.12 released A...

Multi-Selection ListView ANDROID with CheckBox

Shaadi.com Indian Matrimonials Download code Create New Android Project: in res/layout/main.xml create new layout for list row : in res/layout/list_row.xml in your Main Activity Class: Create Class name mItems: Create New Class name SelectViewHolder: Create New Class name SelectArrayAdapter: Download Source Code Click Here : Check PART2 for more detail. Shaadi.com Matrimonials