3 Steps to implement the Expandable ListView in android
Step 1 : Initilize the ExpandableListView and ExpandableListAdapter in a onCreate()
ExpandableListAdapter mAdapter;
ExpandableListView epView = (ExpandableListView) findViewById(R.id.ExpandableListView01);
mAdapter = new MyExpandableListAdapter();
epView.setAdapter(mAdapter);
Step 2 : Create a custom BaseApdapter Class
/**
* A simple adapter which maintains an ArrayList of photo resource Ids. Each
* photo is displayed as an image. This adapter supports clearing the list
* of photos and adding a new photo.
*
*/
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
// Sample data set. children[i] contains the children (String[]) for
// groups[i].
private String[] groups = { "Parent1", "Parent2",
"Parent3" };
private String[][] children = { { "Child1" },{ "Child2" }, { "Child3" },{ "Child4" }, { "Child5" } };
public Object getChild(int groupPosition, int childPosition) {
return children[groupPosition][childPosition];
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public int getChildrenCount(int groupPosition) {
int i = 0;
try {
i = children[groupPosition].length;
} catch (Exception e) {
}
return i;
}
public TextView getGenericView() {
// Layout parameters for the ExpandableListView
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, 64);
TextView textView = new TextView(MainActivity.this);
textView.setLayoutParams(lp);
// Center the text vertically
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
textView.setTextColor(R.color.marcyred);
// Set the text starting position
textView.setPadding(36, 0, 0, 0);
return textView;
}
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(getChild(groupPosition, childPosition).toString());
return textView;
}
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}
public int getGroupCount() {
return groups.length;
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(getGroup(groupPosition).toString());
return textView;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public boolean hasStableIds() {
return true;
}
}
3. Listeners
epView.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView arg0, View arg1,
int groupPosition, long arg3) {
if (groupPosition == 5) {
}
return false;
}
});
epView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent,
View v, int groupPosition, int childPosition,
long id) {
if (groupPosition == 0 && childPosition == 0) {
}
return false;
}
});
Step 1 : Initilize the ExpandableListView and ExpandableListAdapter in a onCreate()
ExpandableListAdapter mAdapter;
ExpandableListView epView = (ExpandableListView) findViewById(R.id.ExpandableListView01);
mAdapter = new MyExpandableListAdapter();
epView.setAdapter(mAdapter);
Step 2 : Create a custom BaseApdapter Class
/**
* A simple adapter which maintains an ArrayList of photo resource Ids. Each
* photo is displayed as an image. This adapter supports clearing the list
* of photos and adding a new photo.
*
*/
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
// Sample data set. children[i] contains the children (String[]) for
// groups[i].
private String[] groups = { "Parent1", "Parent2",
"Parent3" };
private String[][] children = { { "Child1" },{ "Child2" }, { "Child3" },{ "Child4" }, { "Child5" } };
public Object getChild(int groupPosition, int childPosition) {
return children[groupPosition][childPosition];
}
public long getChildId(int groupPosition, int childPosition) {
return childPosition;
}
public int getChildrenCount(int groupPosition) {
int i = 0;
try {
i = children[groupPosition].length;
} catch (Exception e) {
}
return i;
}
public TextView getGenericView() {
// Layout parameters for the ExpandableListView
AbsListView.LayoutParams lp = new AbsListView.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, 64);
TextView textView = new TextView(MainActivity.this);
textView.setLayoutParams(lp);
// Center the text vertically
textView.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
textView.setTextColor(R.color.marcyred);
// Set the text starting position
textView.setPadding(36, 0, 0, 0);
return textView;
}
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(getChild(groupPosition, childPosition).toString());
return textView;
}
public Object getGroup(int groupPosition) {
return groups[groupPosition];
}
public int getGroupCount() {
return groups.length;
}
public long getGroupId(int groupPosition) {
return groupPosition;
}
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
TextView textView = getGenericView();
textView.setText(getGroup(groupPosition).toString());
return textView;
}
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
public boolean hasStableIds() {
return true;
}
}
3. Listeners
epView.setOnGroupClickListener(new OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView arg0, View arg1,
int groupPosition, long arg3) {
if (groupPosition == 5) {
}
return false;
}
});
epView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent,
View v, int groupPosition, int childPosition,
long id) {
if (groupPosition == 0 && childPosition == 0) {
}
return false;
}
});
I am new to Android. Where is "R.id.ExpandableListView01" declared?
ReplyDeleteIt's never declared. It's created dynamically at build time from an XML file (which, unfortunately, is not explained or given in the example).
ReplyDeleteHow to hide icon down/group?
ReplyDeleteset android:groupindicator="@null" in xml
Deletehi
ReplyDeletei m using base adapter.
and i m inflating a layout which contains(1 textview,1 spinner).
every time i select item from different different spinner, i got the same value for all though having diff diff values.
i m stuck on my school project.
deadlines are near.
plz. help me out
hi I wanna use an image icon in childs of android expandable listview same type explained above ..
ReplyDeleteanyone can guide me how i can do this .?
wating at
I shall be very very thankful to you ...
aftab.nasir13(at)gmail.com
Hi This code is giving me error Null pointer Here is the LogCat...
ReplyDelete04-01 13:22:07.433: ERROR/AndroidRuntime(344): at com.expandable.MainExpandable.onCreate(MainExpandable.java:34)
04-01 13:22:07.433: ERROR/AndroidRuntime(344): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
04-01 13:22:07.433: ERROR/AndroidRuntime(344): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
Hello, can you give me your project to my mail lethailinh9999@gmail.com. Cause i can't handle some error.Thank you so much
ReplyDeletedo we have to always use same number of child items for each group?
ReplyDeletehi i need this code where can i get complete code
ReplyDeleteit is not work in android 4.0.3
ReplyDeletefirst of all can i know what is the difference between listview and expandable list view in android please..
Deletehow i call other activity o intent?
ReplyDeleteHello fam. May someone please please send me a complete code on how to data from SQL database to expandable list view. Please guys help. My email is mlilomayibongwe@gmail.com
ReplyDeleteHow is it that simply anybody can write a website and acquire as widespread as this? Its not like youve said something incredibly spectacular ?
ReplyDeletemore like youve painted a reasonably picture over a difficulty that you simply recognize nothing concerning I don’t want to sound mean, here.
but do you really suppose that you can escape with adding some pretty pictures and not really say anything? 휴게텔