android Listview 获取任意指定item数据 getChildAt 挂起 解决办法

通过代码获去listview的某一行(任意行)的item。

不是特指单击的某一行:lv.setOnItemClickListener(new OnItemClickListener()


通过getChildAt获取可能存在问题,导致应用挂起

如下易挂的代码

LinearLayout llTmp = (LinearLayout) lv.getChildAt(i);
ViewHolder vhTMP = (ViewHolder) llTmp.getTag();
strSelectData = (String) vhTMP.tvNo.getText();


原因:

getChildAt是获取当前“正在显示的”item(不是全部的item),所以对于listview假如存在滑动隐藏的item(很常见),再通过getChildAt(i)获取时,i可能会大于getChildCount,导致挂起。


解决参照如下,代码

public View getViewByPosition(int pos, ListView listView) {
final int firstListItemPosition = listView.getFirstVisiblePosition();
final int lastListItemPosition = firstListItemPosition
+ listView.getChildCount() - 1;


if (pos < firstListItemPosition || pos > lastListItemPosition) {
return listView.getAdapter().getView(pos, null, listView);
} else {
final int childIndex = pos - firstListItemPosition;
return listView.getChildAt(childIndex);
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值