前言
在Android中,判断ListView的某个Item是否可见,然后根据不可见继续位置刷新等操作。
下面简单记录一下可以判断当前item是否可见的方法。
正文
方式1
使用ListView封装的方法getFirstVisiblePosition()和getLastVisiblePosition()
if (position < mListView.getFirstVisiblePosition() || position >= mListView.getLastVisiblePosition()) { mListView.setSelection(position); }
简单方便。
方式2
监听ListView滚动状态,之前有记录过,如下
mListView.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { //滚动停止时回调 case OnScrollListener.SCROLL_STATE_IDLE: break; //正在滚动时回调 case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: break; //抛动后由于惯性回调 case OnScrollListener.SCROLL_STATE_FLING: break; } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // firstVisibleItem 可见的第一个item // visibleItemCount 能看见的item总数 // totalItemCount 整个Listview的总数 } });
主要使用到onScroll()中的firstVisibleItem和visibleItemCount。
定义一个开始索引和结束索引来记录第一个可见的和第二个可见的。
mFirstVisibleItem = firstVisibleItem; mLastVisibleItem = firstVisibleItem + visibleItemCount;
if (position < mFirstVisibleItem || position >= mLastVisibleItem) { mListView.setSelection(position); }
这个方式跟第一个差不多。
方式3
这个方式需要知道当前firstVisibleItem,这个跟上方式1或方式2中都可以获取。
int childIndex = position - mListView.getFirstVisiblePosition(); View childView = mListView.getChildAt(childIndex); if (null != childView && childView.getVisibility() == View.VISIBLE) { //可见,不处理 } else { mListView.setSelection(position); }
小结
当然,还有其他方式,但上面3中已经足够了。
参考文章
《》
《
© 版权声明