ExpandableListView - onItemLongClick - getPackedPositionChild始终返回0

时间:2013-11-10 21:39:26

标签: expandablelistview

下面的

ExpandableListView.getPackedPositionChild(id)总是返回0.组位置是正确的,但是我无法获得正确的子位置。下面的代码出了什么问题?

@Override
    public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
        if (ExpandableListView.getPackedPositionType(id) == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
            int groupPosition = ExpandableListView.getPackedPositionGroup(id);
            int childPosition = ExpandableListView.getPackedPositionChild(id);
            // do something
            return true;
        }
        return false;
    }

1 个答案:

答案 0 :(得分:5)

需要一些额外的代码。您必须首先将输入的基于整数的平面列表位置转换为基于长的打包位置。测试代码如下:

@Override   
public boolean onItemLongClick( AdapterView<?>    parent,
                                View              view,
                                int               position,
                                long              id) {

    //  convert the input flat list position to a packed position
    long packedPosition = m_expandableListView.getExpandableListPosition(position);

    int itemType        = ExpandableListView.getPackedPositionType(packedPosition); 
    int groupPosition   = ExpandableListView.getPackedPositionGroup(packedPosition);
    int childPosition   = ExpandableListView.getPackedPositionChild(packedPosition);


    //  GROUP-item clicked
    if (itemType == ExpandableListView.PACKED_POSITION_TYPE_GROUP) {
        //  ...
        onGroupLongClick(groupPosition);
    }

    //  CHILD-item clicked
    else if (itemType == ExpandableListView.PACKED_POSITION_TYPE_CHILD) {
        //  ...
        onChildLongClick(groupPosition, childPosition);
    }


    //  return "true" to consume event - "false" to allow default processing
    return false;
}