今天遇到了一个很奇怪的问题,我所设定的一个listview 有10个item,当我的 list.getCount 的数量对其进行for 循环的时候,当到第6个item的时候,得到的view对象却是null,这让我很费解,经过一番查询,明白了这个问题是怎么回事,与大家分享下:
如图片红框部分的listview部分。这其实涉及到android的listview控件的内存处理问题:当我们加载listview时,如果这个listview的数据量比较多,它是显示不完全的,但这时是否是所有的数据都已经加载?答案是否定的,listview加载的数量是当前屏幕展示的数量再多四个,分别是上下各自缓冲两个,这就是问题所在。当我listview有10个item,但我当前的布局最多显示4个,所以当去得到第七个的时候,会出现得到的item为空的现象。解决办法如下:
public class MeasureitemListener implements OnItemClickListener{
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
firstlocation=arg2;
datalDialog= new LoadDialogDao(getActivity(),"数据加载中...");
datalDialog.show();
for(int i=0;i<measure_type_list.getCount();i++){
int firvisible=measure_type_list.getFirstVisiblePosition(); \\获得第一个可见item的index
View v=measure_type_list.getChildAt(i-firvisible);
if(v!=null){
if (arg2 == i) {
v.setBackgroundColor(R.color.lightblue);
} else {
v.setBackgroundResource(R.drawable.list_item_selector);
}
}
}
}
};
解决思路就是加上如上红字部分,获得屏幕的第一个可见item的index,然后用当前的child的index减去这个值就可以得到当前的对象了。
本文出自 “莫慌张,募直向前” 博客,请务必保留此出处http://kunyali.blog.51cto.com/4890065/1435989
关于android:listview getChildAt 为空的解释,布布扣,bubuko.com
关于android:listview getChildAt 为空的解释
原文地址:http://kunyali.blog.51cto.com/4890065/1435989