Программно свернуть группу в ExpandableListView

Когда я развожу новую группу, могу ли я развернуть последний, расширенный?

Solutions Collecting From Web of "Программно свернуть группу в ExpandableListView"

Попробуйте поместить это в свой ExpandableListAdapter , listView – это ссылка на сам ExpandableListView . И lastExpandedGroupPosition – это целочисленная переменная-член, определенная внутри вашего 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; } 

Очень полезно, но, как упоминает Anh Tuan в комментариях выше, у меня возникли проблемы с ExpandableListView, а затем прокрутка назад к вершине выбранной в данный момент группы (она останется в текущей прокрученной позиции, где-то посередине группы) , Вам также нужно добавить onGroupClickListener (), чтобы перейти к правильной позиции:

 @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { // Implement this method to scroll to the correct position as this doesn't // happen automatically if we override onGroupExpand() as above parent.smoothScrollToPosition(groupPosition); // Need default behaviour here otherwise group does not get expanded/collapsed // on click if (parent.isGroupExpanded(groupPosition)) { parent.collapseGroup(groupPosition); } else { parent.expandGroup(groupPosition); } return true; } 

Это сработало для меня

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

Сделайте это, чтобы расширить группу нажатых и свернуть все остальные

 public void onGroupExpand(int groupPosition) { for (int i = 0; i < len; i++) { if (i != groupPosition) { expandableListDetailsLevel.collapseGroup(i); } } } 

Это работает для меня.

  @Override public void onGroupExpanded(int groupPosition) { for(int i=0;i<mGroupCollection.size();i++){ if(i==groupPosition){ System.out.println("Nothing"); } else{ mExpandableListView.collapseGroup(i); } } super.onGroupExpanded(groupPosition); }