Je développe l'application Android en utilisant la vue liste extensible. En fait, ce dont j'ai besoin, c'est un groupe de listage qui contient des enfants.
Si je sélectionne un groupe non extensible, il devrait s’agrandir. Après avoir sélectionné le deuxième groupe à ce moment-là, le premier groupe devrait être réduit. J'ai utilisé Google, mais je ne trouvais pas ce que je voulais. Sil te plait aide moi.
Avoir la position actuelle du groupe développé stockée dans une variable. Dans onGroupExpanded, procédez comme suit.
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;
}
});
Utilisez ce code cela fonctionnera
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;
}
Si ExpandableListView a plus de 2 groupes:
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);
}
}
}
});
Tous les groupes, sauf celui sur lequel vous avez cliqué, seront réduits.
Obtenez ExpendableListView
puis substituez la méthode suivante - 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;
}
});
Essayez de placer ceci dans votre ExpandableListAdapter, listView est une référence à ExpandableListView lui-même. Et lastExpandedGroupPosition est une variable membre entière définie dans votre 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;
}
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);
}
}
}
});