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

本文深入探讨了Android ListView中setSelection()与setSelectionFromTop()方法的区别,通过代码实现解析了两个方法的核心作用,并解释了它们在定位ListView项时的不同之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里写图片描述
项目有一个需求,搜索页面搜索商品进入商品界面,对所搜商品的类别和商品都要做一个标示,一开始是用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()有了更深刻的认识了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值