ExpandableListView组项目上的Android LongClickListener

erd*_*ter 11 android expandablelistview

我在本教程的帮助下创建了一个ExpandableListView:link.我或多或少了解代码,并试图在组上设置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;
      }
  });  
Run Code Online (Sandbox Code Playgroud)

如何在组项上设置longclicklistener?

我知道代码很难读,所以我创建了一个示例项目并将其上传到此处.这对孩子没有onlongclicklistener,因为这几乎是上面链接的原始内容.如果有人能帮助我,我将不胜感激.

Jon*_*n O 40

组项是所有项的子集,因此在任何一种情况下都应调用上述方法.然后,您可以使用上面的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;
          }
  });
Run Code Online (Sandbox Code Playgroud)

如果它是一个组,您将使用上面的getPackedPositionGroup来获取长按的组ID.如果它是一个项目,您将使用getPackedPositionGroup和getPackedPositionChild的组合.