【问题标题】:Android LongClickListener on ExpandableListView group itemsExpandableListView 组项目上的 Android LongClickListener
【发布时间】:2012-03-30 21:31:11
【问题描述】:

我在本教程的帮助下创建了一个 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;
      }
  });  

如何在组项目上设置 longclicklistener?

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

【问题讨论】:

    标签: android expandablelistview


    【解决方案1】:

    组项目是所有项目的子集,因此在任何一种情况下都应调用上述方法。然后,您将使用上面的 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 的组合。

    【讨论】:

    • 哇。这太容易了。非常感谢!
    • 不客气!如果可行,请不要忘记接受/赞成/等。 :)
    • 哇....这通常实现,但与数据的组和子事件完美地工作,访问它的位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-04-21
    • 1970-01-01
    相关资源
    最近更新 更多