2011-04-12 13 views
6

En mi expandibleListView he creado un botón personalizado para expandir/colapsar el grupo y para expandirlo funciona, pero cuando colapsa no.En un ExpandableListView, ¿cómo detectar el colapso del grupo?

con este código

listView.setOnGroupClickListener(new OnGroupClickListener() { 

      @Override 
      public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { 
       Log.d("group click"); 
       return true; 
      } 
     }); 

     listView.setOnGroupCollapseListener(new OnGroupCollapseListener() { 

      @Override 
      public void onGroupCollapse(int groupPosition) { 
       Log.d("group collapse"); 

      } 
     }); 

     listView.setOnGroupExpandListener(new OnGroupExpandListener() { 

      @Override 
      public void onGroupExpand(int groupPosition) { 
       Log.d("group expand"); 
      } 
     }); 

con este código: cuando el grupo se derrumbó:

  • clic sobre el botón = expanda el grupo
  • clic en cualquier otro lugar en el grupo = hacer algo manejar por setOnGroupClickListener

cuando el grupo se expande:

  • clic sobre el botón = colapso del grupo (bien, pero ...)
  • clic en cualquier otro lugar en el grupo = colapso del grupo y no de reacción setOnGroupClickListener

¿Por qué setOnGroupClickListener no está cargado cuando hago clic en un grupo expandido? ¿Cómo resolver eso?

Respuesta

1

He enfrentado un problema similar. Necesitaba que todos los grupos estuvieran siempre expandidos y clicables. Para que funcione, escribí este mono-código en mi ExpandableListActivity:

public void onCreate(Bundle savedInstanceState) { 
    ... 
    // Expanding all. 
    for(int i = 0; i < adapter.getGroupCount(); i++) 
     getExpandableListView().expandGroup(i); 
    ... 
} 

@Override 
public boolean onGroupClick(ExpandableListView parent, View v, 
     int groupPosition, long id) { 
    overrideStupidListBehaviour(groupPosition); 
    return false; 
} 

@Override 
public void onGroupCollapse(int groupPosition) { 
    // Forbidding it to collapse. 
    getExpandableListView().expandGroup(groupPosition); 
    overrideStupidListBehaviour(groupPosition); 
} 

private void overrideStupidListBehaviour(int groupPosition) { 
    // Code to do when onGroupClick is called 
} 

estoy realmente interesado, si hay una forma normal de hacer eso.

0

si hace clic en un grupo debe llamarse cada vez, pero si su botón u otro elemento seleccionable o enfocable está sobre/en la vista de grupo, solo activará el método onClick del objeto encima de los demás. .. si esta no es la solución, proporcione más código.

@folone hay una manera mejor:

@Override 
public boolean onGroupClick(ExpandableListView parent, View v, 
     int groupPosition, long id) { 
    doSomething(); 
    return true; 
} 

retorno verdadera debe cancelar la mayoría de cosas por defecto -> expandir/contraer

1

// Listview Grupo collasped oyente

expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() { 
@Override 
public void onGroupCollapse(int groupPosition) { 
    Toast.makeText(getApplicationContext(), 
      listDataHeader.get(groupPosition) + " Collapsed", 
      Toast.LENGTH_SHORT).show(); 

}}); 
1

es muy simple de esta manera

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
         View convertView, ViewGroup parent) { 

if(isExpanded){ 
//do something when expanded 

}else{ 
//do something when collapsed or not expanded 

} 
........... 
} 
Cuestiones relacionadas