2012-03-30 16 views
11

Ich habe eine ExpandableListView mit Hilfe dieses Tutorials erstellt: link. Ich verstehe den Code mehr oder weniger und habe versucht, einen Longclicklistener auf die Gruppen zu setzen.Android LongClickListener auf ExpandableListView Gruppenartikel

Es gibt eine setOnChildClickListener auf die untergeordneten Elemente bereits und ich es geschafft, eine longclicklistener auf sie zu setzen:

exList.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
       groupPosition = ExpandableListView.getPackedPositionGroup(id); 
       childPosition = ExpandableListView.getPackedPositionChild(id); 
//[....] 
return false; 
     } 
    }); 

Wie kann ich eine longclicklistener auf den Gruppenpositionen eingestellt?

Ich weiß, dass der Code schwer zu lesen ist, also habe ich ein Beispielprojekt erstellt und es auf here hochgeladen. Dies hat keinen onlongclicklistener auf den childs, da dies fast das Original aus dem obigen Link ist. Ich würde mich freuen, wenn mir jemand dabei helfen könnte.

Antwort

41

Gruppenelemente sind eine Teilmenge aller Elemente, daher sollte die obige Methode in jedem Fall aufgerufen werden. Sie würden dann getPackedPositionType wie oben verwenden, um herauszufinden, ob das ausgewählte Element eine Gruppe, ein Element oder null ist.

Der Code dafür wäre:

exList.setOnItemLongClickListener(new OnItemLongClickListener() { 
     @Override 
     public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { 
      int itemType = ExpandableListView.getPackedPositionType(id); 

      if (itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) { 
       childPosition = ExpandableListView.getPackedPositionChild(id); 
       groupPosition = ExpandableListView.getPackedPositionGroup(id); 

       //do your per-item callback here 
       return retVal; //true if we consumed the click, false if not 

      } else if(itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) { 
       groupPosition = ExpandableListView.getPackedPositionGroup(id); 
       //do your per-group callback here 
       return retVal; //true if we consumed the click, false if not 

      } else { 
       // null item; we don't consume the click 
       return false; 
      } 
    }); 

Wenn es eine Gruppe ist, werden Sie wie oben verwenden getPackedPositionGroup die Gruppen-ID zu erhalten, die lang gedrückt wird. Wenn es sich um ein Element handelt, verwenden Sie die Kombination aus getPackedPositionGroup und getPackedPositionChild.

+0

Wow. Das war so einfach. Vielen Dank! – erdomester

+1

Gern geschehen! Wenn es funktioniert, vergiss nicht,/upvote/etc. :) –

+0

Wow .... Diese normalerweise Implementierung, aber perfekt funktioniert gut mit Gruppen- und Kind-Ereignisse von Datenzugriff für Position. –

Verwandte Themen