如何获取ListView可见Item数

如何获取ListView可见Item数,第1张

项目需要统计listview中每个“曝光”的item的数据,即,随着滑动,某个item由不可见到可见,那我就需要把这个item的index获取到,以便后续 *** 作。当然,如果某个item已经是可见的,那么在滑动的时候如果没有划出屏幕之外,就不再“曝光”,以免造成重复“曝光”,但是当已经“曝光”的item划出屏幕之后再次划入屏幕变成可见,那么需要重新“曝光”,解决办法如下:
实现OnScrollListener接口,重写onScroll方法,listview滑动时会调用onScroll方法,在这个方法里展开逻辑判断,具体代码如下:
先定义一个visibleList存储上一次屏幕上可见的item的index:
private List<Integer> visibleList = new ArrayList<Integer
在定义一个list存储每次滑动后屏幕上可见的item的index,然后在onscroll里比较两个list,找出两个list里不同的元素即可得到新“曝光”的item的index,这些新的index必定是由不可见变为可见的。代码如下:
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
if (performanceWidgetTicket != null && mLiveShowTicketList != null) {//这行代码是我的数据 *** 作所需要的null判断,可换成你需要的条件
// 比较两次可见的item的序号,只曝光新出现的
ArrayList<Integer> list = new ArrayList<Integer>(visibleItemCount);
// 将最新可见item的index加入到临时list中
for (int i = firstVisibleItem; i < firstVisibleItem + visibleItemCount; i++) {
listadd(i);
}
if (visibleList != null && list != null) {
//新可见item的index的集合
ArrayList<Integer> diffList = getDiffrent(list, visibleList);
if (diffList != null) {
for (int x = 0; x < diffListsize(); x++) {
// 曝光 *** 作
// 在这里做相应 *** 作
LogUtilsLOGD(TAG, "diffListget(x):" + diffListget(x));
}
//更新list,将最新的可见item的index加入到list
visibleListclear();
visibleListaddAll(list);
}
}
//清空最新可见item的index的list
if (list != null) {
listclear();
}
}
}
/
@MethodName:getDiffrent
@tags:@param list1
@tags:@param list2
@tags:@return
@return_type:ArrayList<Integer>
@exception
@TODO:取出两个list中不同的元素加入到新的list
@since
/
private ArrayList<Integer> getDiffrent(List<Integer> list1, List<Integer> list2) {
long st = SystemnanoTime();
ArrayList<Integer> diff = new ArrayList<Integer>();
for (Integer index : list1) {
if (!list2contains(index)) {
diffadd(index);
}
}
return diff;
}

自定义adapter继承BaseAdapter,里面需要你重写getCount()方法,在这个方法里面,需要返回一个数,这个数就是你item的数量,假设你需要控制只显示10条,那么就return
10;
即可


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13412475.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-31
下一篇 2023-07-31

发表评论

登录后才能评论

评论列表(0条)

保存