商品搜索跳转显示引出的setSelection()和setSelectionFromTop()的区别


项目有一个需求,搜索页面搜索商品进入商品界面,对所搜商品的类别和商品都要做一个标示,一开始是用setSelection()直接来定位ListView的,但是因为商品顶部会有一个类别,往往会导致商品显示不全,所以就用到了setSelectionFromTop();

看一下setSelectionFromTop()的具体实现,代码如下:

public void 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()的具体实现,代码如下:

public void setSelection(int position) {  
    setSelectionFromTop(position, 0);  
}  

原来,setSelection()内部就是调用了setSelectionFromTop(),只不过是Y轴的偏移量是0而已。
现在应该对setSelection()和setSelectionFromTop()有了更深刻的认识了。

你可能感兴趣的:(商品搜索跳转显示引出的setSelection()和setSelectionFromTop()的区别)