int tPostion = getFirstVisiblePosition();//得到当前显示的第一个item的position
long flatPostion = getExpandableListPosition(tPostion );//转换为ExpandableListView特有的类似于position的东西
//通过两个静态方法得到group和child的position
int groupPosition = ExpandableListView.getPackedPositionGroup(flatPostion);
int childPosition = ExpandableListView.getPackedPositionChild(flatPostion);
long packedPosition = getExpandableListPosition(flatListPosition);
// 2. Unpack packed position type
int positionType = getPackedPositionType(packedPosition);
// 3. Unpack position values based on positionType
// 如果positionType不是空类型,就是Group,或者Child
if( positionType != PACKED_POSITION_VALUE_NULL){
// (Child类型时也有Group信息)
groupPosition = getPackedPositionGroup(packedPosition);
// 如果是child类型,则取出childPosition
if(positionType == PACKED_POSITION_TYPE_CHILD){
childPosition = getPackedPositionChild(packedPosition);
}
}else{
Log.d("FooLabel", "positionType was NULL - header/footer?");
}
//判断当前item不是listivew的headview与footerview
public long getExpandableListPosition(int flatListPosition) {
if (isHeaderOrFooterPosition(flatListPosition)) {
return PACKED_POSITION_VALUE_NULL;
}
final int adjustedPosition = getFlatPositionForConnector(flatListPosition);
PositionMetadata pm = mConnector.getUnflattenedPos(adjustedPosition);
long packedPos = pm.position.getPackedPosition();
pm.recycle();
return packedPos;
}