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获取View的内容图片
- android选择一张本机图片
- Android获取SHA1指纹
- 实现查询地址和路线导航的代码
- android 获取摄像头像素
- 系统相册分析(GallerPicker)
- Android使用SharedPreferences实现数据存储
- android几种图像之间转换
- Android(安卓)Studio 布局文件格式化代码