android expandablelistview does not expand or receive click events

android, click, expandablelistadapter, expandablelistview, listener

Solution

I've also encountered similar problem like you. After a couple of days of investigation, I found that I did something wrong. So I fixed it to work correctly by making small change.

Let's look at the body of `boolean onGroupClick(...)` in `setOnGroupClickListener`. You've returned true that means "the click was handled"

You should return false if you want to expand. So I suggest you to do like this :

forumListView.setOnGroupClickListener(new OnGroupClickListener() {
    @Override
    public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
            Log.d("onGroupClick:", "worked");
            parent.expandGroup(groupPosition);
            return false;
        }
    });

in `android.widget.ExpandableListView` class, there is a method named `boolean handleItemClick(View v, int position, long id)` which is responsible for expanding/collapsing groups or passing on the click to the proper child.

 /* It's a group click, so pass on event */
         if (mOnGroupClickListener != null) {
             if (mOnGroupClickListener.onGroupClick(this, v,
                     posMetadata.position.groupPos, id)) {
                 posMetadata.recycle();
                 return true;
             }
         }

  /* expanding/collapsing/other tasks... */

if you implement `onGroupClick` to return true, the the code below 8th line will never be executed. (that means, groups will never be collapsed, expanded)

Hope my answer helped you :-) good luck!

Problem

I can't for the life of me figure out why my ExpandableListView doesn't expand... I have used log statements in just about every click listener I can find for the ExpandableListView and it doesnt look like any of them get called. I know there are many posts on this topic but I have read through them all and tried many things and am having no luck, hopefully I'm missing some tiny error that will be easy to spot for someone else. Main Activity: ``` public class ForumListActivity extends Activity { private static ArrayList<Forum> forumList; private static ArrayList<ArrayList<SubForum>> subForumList; private ExpandableListView forumListView; private ForumListAdapter forumListAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.main_page); this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); forumListView = (ExpandableListView) this.findViewById(R.id.main_page_forum_list); forumList = new ArrayList<Forum>(); subForumList = new ArrayList<ArrayList<SubForum>>(); setUpForums(this); forumListAdapter = new ForumListAdapter(this, forumList, subForumList); forumListView.setAdapter(forumListAdapter); forumListView.setOnGroupExpandListener(new OnGroupExpandListener(){ @Override public void onGroupExpand(int groupPosition) { Log.d("onGroupExpand", "this works?"); for(int i=0; i<forumListAdapter.getGroupCount(); i++) { if(i != groupPosition) forumListView.collapseGroup(groupPosition); } } }); forumListView.setOnGroupClickListener(new OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { Log.d("onGroupClick:", "worked"); parent.expandGroup(groupPosition); return true; } }); } ``` Note: the method setUpForums() just takes system arrays and puts them into forumList and subForumList ListViewAdapter: ``` public class ForumListAdapter extends BaseExpandableListAdapter { private ArrayList<Forum> groups; private ArrayList<ArrayList<SubForum>> children; private Context ctx; public ForumListAdapter(Context ctx, ArrayList<Forum> groups, ArrayList<ArrayList<SubForum>> children) { this.ctx = ctx; this.groups = groups; this.children = children; } @Override public Object getChild(int groupPosition, int childPosition) { return children.get(groupPosition).get(childPosition); } @Override public long getChildId(int groupPosition, int childPosition) { return childPosition; } @Override public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(ctx); convertView = inflater.inflate(R.layout.forum_list_child_item_row, null); } SubForum currentSubForum = children.get(groupPosition).get(childPosition); TextView name = (TextView)convertView.findViewById(R.id.child_row_forum_title); TextView desc = (TextView)convertView.findViewById(R.id.child_row_forum_description); if (name != null) name.setText(currentSubForum.getName()); if (desc != null) desc.setText(currentSubForum.getDescription()); convertView.setFocusableInTouchMode(true); return convertView; } @Override public int getChildrenCount(int groupPosition) { return children.get(groupPosition).size(); } @Override public Object getGroup(int groupPosition) { return groups.get(groupPosition); } @Override public int getGroupCount() { return groups.size(); } @Override public long getGroupId(int groupPosition) { return groupPosition; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater inflater = LayoutInflater.from(ctx); convertView = inflater.inflate(R.layout.forum_list_group_item_row, null); } Forum currentForum = (Forum) groups.get(groupPosition); TextView name = (TextView) convertView.findViewById(R.id.group_item_forum_title); //ImageView image = (ImageView) convertView.findViewById(R.id.group_item_expander_image); if(name != null) name.setText(currentForum.getName()); /* if(image != null) { int[][] group_state_sets = {{}, {android.R.attr.state_expanded}}; image.setVisibility(View.VISIBLE); int stateSetIndex = (isExpanded ? 1 : 0) ; Drawable drawable = image.getDrawable(); drawable.setState(group_state_sets[stateSetIndex]); } */ return convertView; } @Override public boolean hasStableIds() { return true; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } } ``` Group Layout: ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/turquoise_gradient" android:orientation="horizontal" android:paddingTop="6dip" android:paddingBottom="6dip" android:paddingLeft="6dip" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/turquoise_gradient" android:orientation="vertical" android:padding="2dip" > <TextView android:id="@+id/group_item_forum_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical|left" android:gravity="left" android:paddingLeft="5dip" android:textColor="@color/white" android:textSize="16dip" /> </LinearLayout> <!-- <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:gravity="center|right"> <ImageView android:id="@+id/group_item_expander_image" android:focusable="false" android:focusableInTouchMode="false" android:gravity="center" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:src="@drawable/collapse_down" /> </LinearLayout> --> </LinearLayout> ``` child layout: ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@drawable/turquoise_gradient" android:orientation="horizontal" android:paddingTop="6dip" android:paddingBottom="6dip" android:paddingLeft="6dip" > <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="2dip" android:background="@drawable/turquoise_gradient" > <TextView android:id="@+id/child_row_forum_title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="left" android:layout_gravity="center_vertical" android:paddingLeft="5dip" android:textColor="@color/white" android:maxLines="1" android:textSize="11dip" /> <TextView android:id="@+id/child_row_forum_description" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="left" android:layout_gravity="center_vertical" android:paddingLeft="15dip" android:textColor="@color/white" android:maxLines="2" android:textSize="11dip" /> </LinearLayout> </LinearLayout> ``` main page layout: ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/black" android:orientation="vertical" > <ExpandableListView android:id="@+id/main_page_forum_list" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@color/black" android:divider="@color/black" android:dividerHeight="1dip" android:clickable="true" /> </LinearLayout> ``` Any help you can provide is greatly appreciated!

Original source