web-dev-qa-db-fra.com

Réduire tout le groupe sauf le groupe sélectionné dans la liste déroulante extensible android

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.

60
Sathish

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;
    }
});
191
user936414

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;
    }
});
28
@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;
    }
8
KOTIOS

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.

4
Hassan Tareq

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;
        }
    });
3
Mikheil Zhghenti

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;
    }
1
Sundeep Badhotiya
   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);
                    }
                }
            }
        });
0
Dhaval Solanki