2

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;
    }
4

1 回答 1

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;
}
于 2013-11-30T21:47:00.100 回答