在使用ExpandableListView时有时需要对父项设置长按监听,但自带的setOnItemLongClickListener中的flatPos位置是所有展开项,包括父项和子项在内的位置,而大多情况下需要得到父项再父项列表中的位置以及子项在子项列表中的位置。
下面是解决方法:
//长按监听 expandableListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> parent, View view, int flatPos, long l) { //得到点击的父位置,子位置 long packedPos = ((ExpandableListView)parent).getExpandableListPosition(flatPos); int groupPosition= ExpandableListView.getPackedPositionGroup(packedPos); int childPosition = ExpandableListView.getPackedPositionChild(packedPos); System.out.println("groupPosition----"+groupPosition); System.out.println("childPosition----"+childPosition); if(childPosition == -1){//长按的是父项 //这里做关于父项的相关操作...... } else {//长按的是子项 //这里做关于子项的相关操作....... } return true; } });childPosition == -1 时点击的是GroupView, childPosition >= 0 时点击的是ChildView