Android LongClickListener для элементов группы ExpandableListView

Я создал ExpandableListView с помощью этого урока: ссылка. Я понимаю код более или менее и пытаюсь установить 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 на элементы группы?

Я знаю, что код трудно читать, поэтому я создал образец проекта и загрузил его в здесь. У этого ребенка нет onlongclicklistener, так как это почти оригинал из вышеупомянутой ссылки. Я был бы признателен, если бы кто-то помог мне с этим.

Ответ 1

Элементы группы являются подмножеством всех элементов, поэтому вышеприведенный метод следует вызывать в любом случае. Затем вы должны использовать getPackedPositionType, как указано выше, чтобы выяснить, выбран ли выбранный элемент, элемент или нуль.

Код для этого:

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, как указано выше, чтобы получить идентификатор группы, который долгое нажатие. Если это элемент, вы будете использовать комбинацию getPackedPositionGroup и getPackedPositionChild.