您的位置:首页 > 其它

【安卓】ExpandableListView中的position

2015-10-28 18:11 429 查看
原文地址:http://m.blog.csdn.net/blog/w7822938/38926511(有删改)

------------------------------

ExpandableListView的position一般只需要知道groupPosition&childPosition就足够了,

但是当遇到要精确记录,移动到ExpandableListView的某个item上,listview提供的setSelectionFromTop(position,top)似乎就'失效'了..

其实不然,只是你传入的position并不是ListView所认识的position罢了;

ExpandableListView中有4个position概念:

1.Flat list position:

listview的原始position(包括child,group)

2.Packed position:

包含了类型信息(group, child, or null for headers/footers),Group position,Child position信息的position

3.Group position:

4.Child position: 

转换公式:

1.FlatList position -> Packed position -> ExpandableList Group/Child positions

// 1. Flat list position -> Packed position

  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_TYPE_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?");

  }

2.ExpandableList Group/Child positions ->Packed position ->FlatList position

// 要从groupPosition或者childPosition转换到flatPosition就简单了

// 先由groupPosition获得packedPosition

long packedPosition = getPackedPositionForGroup(groupPosition); //获得childPosition的packedPosition则使用getPackedPositionForChild()方法

// 再由packedPosition获得flatListPosition

int flatListPosition= getFlatListPosition(packedPosition); 

好了,知道了ExpandableListView的概念,我们就可以使用listview提供的setSelectionFromTop(position,top)方法了!

只要把计算出flatListPosition代入setSelectionFromTop(position,top)就可以了!

(ps:1.top指左顶点坐标,可以通过Listview.getChildAt(index).getTop()获得

2.Listview.getChildAt(index),中index指的是屏幕可见范围内的第index项,而不是listview的第index项)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: