2010-11-30 12 views

Respuesta

118

Trate de poner esto en su ExpandableListAdapter, listView es una referencia al ExpandableListView sí mismo. Y lastExpandedGroupPosition es una variable de miembro entero definida dentro de su 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; 
    } 
+3

Vaya hombre, perfecto! :) ¡MUCHAS GRACIAS! : D –

+2

No hay problema. Hice esto por una aplicación hace un tiempo. Me alegro de que podría ayudar a alguien más. – danh32

+4

Existe un problema con su solución: el nuevo grupo expandido se desplazará hasta la altura del último grupo (que está cerrado). Pero gracias de cualquier manera. –

4

hacer esto para expandir el grupo hecho clic y el colapso de todos los demás

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

que está funcionando para mí.

20

Muy útil, pero como Anh Tuan menciona en los comentarios anteriores, estaba teniendo problemas con la ExpandableListView que no se desplazaba hacia la parte superior del grupo seleccionado actualmente (se mantendría en la posición actualmente desplazada, en el centro de grupo en algún lugar). También es necesario agregar un onGroupClickListener() para desplazarse hasta la posición correcta:

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

Hey groupPosition siempre es return zero me puede guiar –

+0

Aunque técnicamente este truco, no se ve bonito. ¿Alguna recomendación para que se vea mejor? – erkinyldz

+0

Bien, estoy respondiendo mi propia pregunta. Si llama a parent.setSelection (groupPosition) se ve mucho mejor. Tenga en cuenta que debe invocarse después de la lógica de expansión o colapso grupal, no antes. – erkinyldz

2
@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); 
    } 
17

This trabajó para mí

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

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

Oye, este código funcionó para mí ... –

Cuestiones relacionadas