Свернуть все группы, кроме выбранной группы в расширяемом listview android
Я разрабатываю приложение для android с помощью расширяемого списка. На самом деле мне нужно, я перечисляю группу, которая содержит ребенка.
Если я выберу нерасширяемую группу, она должна расшириться, после того, как я выберу вторую группу, в это время первая группа должна быть свернута. Я сделал Google, но я не мог найти то, что я хочу. Пожалуйста, помогите мне.
8 ответов:
текущая развернутая позиция группы хранится в переменной. В onGroupExpanded выполните следующие действия.
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; } });
используйте этот код, это будет работать
expandableList.setOnGroupExpandListener(new OnGroupExpandListener() { int previousItem = -1; @Override public void onGroupExpand(int groupPosition) { if(groupPosition != previousItem ) expandableList.collapseGroup(previousItem ); previousItem = groupPosition; } });
@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; }
Get
ExpendableListView
и затем переопределить следующий метод -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; } });
Если ExpandableListView имеет более 2 групп:
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); } } } });
он свернет все группы, кроме нажатой.
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); } } } });
Попробуйте поместить это в свой 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; }
Я тоже столкнулся с той же проблемой. Но я мог бы решить мою проблему с помощью следующего кода:
поскольку у меня было 4 заголовка в моем расширяемом списке, на основе этого я написал так
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); } });`