前言

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中已经足够了。

参考文章

  1. ListView 如何判断当前item可见

  2. 个人常用的ListView方法简介

相关文章

暂无评论

none
暂无评论...