56 votes

Par programme de l'effondrement d'un groupe dans ExpandableListView

Quand j'ai développer un nouveau groupe, puis-je l'effondrement de la dernière élargi?

122voto

danh32 Points 3479

Essayer de mettre cela dans votre ExpandableListAdapter, listView est une référence à l' ExpandableListView lui-même. Et lastExpandedGroupPosition est un entier, membre de la variable définie à l'intérieur de 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;
    }

21voto

Lundus Points 157

Très utile, mais comme Anh Tuan mentionne dans les commentaires ci-dessus, j'ai eu des problèmes avec la ExpandableListView pas alors de défilement vers le haut de le groupe actuellement sélectionné (il serait rester à la actuellement à volutes position, au milieu du groupe, quelque part). Vous devez également ajouter un onGroupClickListener() pour faire défiler jusqu'à la position correcte:

@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;
}

17voto

Sathish Points 528

Cela a fonctionné pour moi

expandableList.setOnGroupExpandListener(new OnGroupExpandListener() {
    int previousItem = -1;

    @Override
    public void onGroupExpand(int groupPosition) {
        if(groupPosition != previousItem )
            expandableList.collapseGroup(previousItem );
        previousItem = groupPosition;
    }
});

4voto

Driss Bounouar Points 340

Cela, afin d'élargir l'cliqué groupe et l'effondrement de toutes les autres

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

C'est de travailler pour moi.

2voto

raja Points 923
    @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);
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X