2012-03-30 44 views
11

我在本教程的帮助下创建了一个ExpandableListView:link。 我或多或少地理解了代码,并试图在组上设置一个longclicklistener。ExpandableListView组项目上的Android LongClickListener

有对孩子项setOnChildClickListener已经和我设法设置他们longclicklistener:

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

如何设置的项目组一longclicklistener?

我知道代码很难阅读,所以我创建了一个示例项目并将其上传到here。 这对儿童没有onlongclicklistener,因为这几乎是从上面的链接原来的。 如果有人能帮助我,我将不胜感激。

回答

41

组项目是所有项目的一个子集,因此上述方法应在任何一种情况下调用。然后,您可以使用getPackedPositionType来确定所选项目是组,项目还是null。

该代码,这将是:

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

如果它是一组,你将使用getPackedPositionGroup如上获得正被长按组ID。如果它是一个项目,您将使用getPackedPositionGroup和getPackedPositionChild的组合。

+0

哇。这很容易。非常感谢你! – erdomester 2012-03-30 21:57:10

+1

不客气!如果有效,不要忘记接受/ upvote /等。 :) – 2012-03-30 21:59:05

+0

哇....这通常实施,但完全正常工作与组和儿童事件的数据访问它的位置。 – 2014-05-29 06:26:12