java] view plain copy
@Override
publicvoid loaded(Long loadTime,int thisPageNumber,boolean isFromZero,boolean isHasMoreToLoad,List data){
refreshComplete();
checkIfHasMoreToLoad(isHasMoreToLoad);
if(thisPageNumber !=1){// 不是第一页
mListView.setSelectionFromTop(5+2, mIMPullToRefreshListView.getHeaderHeight());
mIMPullToRefreshListView.getHeaderView().setVisibility(View.GONE);
}
}
看一下setSelectionFromTop()的具体实现,代码如下:
[java] view plain copy
/**
* Sets the selected item and positions the selection y pixels from the top edge
* of the ListView. (If in touch mode, the item will not be selected but it will
* still be positioned appropriately.)
*
* @param position Index (starting at 0) of the data item to be selected.
* @param y The distance from the top edge of the ListView (plus padding) that the
* item will be positioned.
*/
publicvoid setSelectionFromTop(int position,int y){
if(mAdapter ==null){
return;
}
if(!isInTouchMode()){
position = lookForSelectablePosition(position,true);
if(position >=0){
setNextSelectedPositionInt(position);
}
}else{
mResurrectToPosition = position;
}
if(position >=0){
mLayoutMode = LAYOUT_SPECIFIC;
mSpecificTop = mListPadding.top + y;
if(mNeedSync){
mSyncPosition = position;
mSyncRowId = mAdapter.getItemId(position);
}
requestLayout();
}
}
从上面的代码可以得知,setSelectionFromTop()的作用是设置ListView选中的位置,同时在Y轴设置一个偏移量(padding值)。
ListView还有一个方法叫setSelection(),传入一个index整型数值,就可以让ListView定位到指定Item的位置。
这两个方法有什么区别呢?看一下setSelection()的具体实现,代码如下:
[java] view plain copy
/**
* Sets the currently selected item. If in touch mode, the item will not be selected
* but it will still be positioned appropriately. If the specified selection position
* is less than 0, then the item at position 0 will be selected.
*
* @param position Index (starting at 0) of the data item to be selected.
*/
@Override
publicvoid setSelection(int position){
setSelectionFromTop(position,0);
}
原来,setSelection()内部就是调用了setSelectionFromTop(),只不过是Y轴的偏移量是0而已。
现在应该对setSelection()和setSelectionFromTop()有了更深刻的认识了。