我在本教程的帮助下创建了一个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,因为这几乎是上面链接的原始内容。 如果有人可以帮助我,我将不胜感激。
答案 0 :(得分: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;
}
});
如果它是一个组,您将使用上面的getPackedPositionGroup来获取长按的组ID。如果它是一个项目,您将使用getPackedPositionGroup和getPackedPositionChild的组合。