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