2012-03-30 2 views
11

С помощью этого учебника я создал ExpandableListView: link. Я понимаю код более или менее и пытаюсь установить longclicklistener на группы.Android LongClickListener для элементов группы ExpandableListView

Существует 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, как указано выше, чтобы выяснить, выбран ли выбранный элемент, элемент или нуль.

Код для этого будет:

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.

+0

Ничего себе. Это было так легко. Большое спасибо! – erdomester

+1

Добро пожаловать! Если это работает, не забудьте принять/upvote/etc. :) –

+0

Wow .... Это обычная реализация, но отлично работает с групповыми и дочерними событиями доступа к данным для позиции. –

 Смежные вопросы

  • Нет связанных вопросов^_^