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 に答える