Collapse all group except selected group in expandable listview android

AndroidExpandablelistviewExpandCollapse

Android Problem Overview


I'm developing android application using expandable list view. Actually what I need is, I'm listing group, which contains child.

If I select an unexpandable group, it should expand, after I ll select second group at that time the first group should be collapsed. I did Google, but I couldn't find what I want. Please help me out.

Android Solutions


Solution 1 - Android

Have the current expanded group position stored in a variable. In onGroupExpanded do the following.

private int lastExpandedPosition = -1;
private ExpandableListView lv; //your expandable listview
...

lv.setOnGroupExpandListener(new OnGroupExpandListener() {
	
	@Override
	public void onGroupExpand(int groupPosition) {
			if (lastExpandedPosition != -1
					&& groupPosition != lastExpandedPosition) {
				lv.collapseGroup(lastExpandedPosition);
			}
			lastExpandedPosition = groupPosition;
	}
});

Solution 2 - Android

Use this code this will work

expandableList.setOnGroupExpandListener(new OnGroupExpandListener() {
    int previousItem = -1;

    @Override
    public void onGroupExpand(int groupPosition) {
        if(groupPosition != previousItem )
            expandableList.collapseGroup(previousItem );
        previousItem = groupPosition;
    }
});

Solution 3 - Android

@Override
    public void onGroupExpanded(int groupPosition){
        //collapse the old expanded group, if not the same
        //as new group to expand
        if(groupPosition != lastExpandedGroupPosition){
            listView.collapseGroup(lastExpandedGroupPosition);
        }

        super.onGroupExpanded(groupPosition);           
        lastExpandedGroupPosition = groupPosition;
    }

Solution 4 - Android

If the ExpandableListView has more than 2 groups:

expandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
    @Override
    public void onGroupExpand(int groupPosition) {
        for (int g = 0; g < expandableListAdapter.getGroupCount(); g++) {
            if (g != groupPosition) {
                expandableListView.collapseGroup(g);
            }
        }
    }
});    

It will collapse all groups except the clicked one.

Solution 5 - Android

Get ExpendableListView and then override the following method - setOnGroupExpandListener

expandableListView = (ExpandableListView) findViewById(R.id.exp_listview);

expandableListView.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
        int previousItem = -1;

        @Override
        public void onGroupExpand(int groupPosition) {
            if (groupPosition != previousItem)
                expandableListView.collapseGroup(previousItem);
            previousItem = groupPosition;
        }
    });

Solution 6 - Android

Try putting this in your ExpandableListAdapter, listView is a reference to the ExpandableListView itself. And lastExpandedGroupPosition is a integer member variable defined inside your ExpandableListAdapter.

 @Override
    public void onGroupExpanded(int groupPosition)

{
        
//collapse the old expanded group, if not the same
        
//as new group to expand
        
if(groupPosition != lastExpandedGroupPosition)

{
          
  listView.collapseGroup(lastExpandedGroupPosition);
      
  }

        super.onGroupExpanded(groupPosition);           
        lastExpandedGroupPosition = groupPosition;
    }

Solution 7 - Android

   elstListView1.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
		@Override
		public void onGroupExpand(int groupPosition) {
			for(int i=0;i<listDataHeader.size();i++){
				if(i==groupPosition){
					//do nothing}
					else{
						elstListView1.collapseGroup(i);
					}
				}
			}
		});

Solution 8 - Android

I also faced the same problem. But I could solved my problem by the following code:

As I had 4 Headers in my expandable list, based on that i wrote like this

expListView.setOnGroupExpandListener(new OnGroupExpandListener() {
			
			@Override
			public void onGroupExpand(int groupPos) {
				// TODO Auto-generated method stub
				expListView.collapseGroup(groupPos+1);
				expListView.collapseGroup(groupPos-1);
				expListView.collapseGroup(groupPos-2);
				expListView.collapseGroup(groupPos+2);
				expListView.collapseGroup(groupPos+3);
				expListView.collapseGroup(groupPos-3);
			}
		});`

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSathishView Question on Stackoverflow
Solution 1 - Androiduser936414View Answer on Stackoverflow
Solution 2 - AndroidRajaReddy PolamReddyView Answer on Stackoverflow
Solution 3 - AndroidKOTIOSView Answer on Stackoverflow
Solution 4 - AndroidHASSAN MD TAREQView Answer on Stackoverflow
Solution 5 - AndroidMisho ZhghentiView Answer on Stackoverflow
Solution 6 - AndroidSundeep BadhotiyaView Answer on Stackoverflow
Solution 7 - AndroidDhaval SolankiView Answer on Stackoverflow
Solution 8 - AndroidNJBoroView Answer on Stackoverflow