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);
}
}

你可能感兴趣的:(android)