OnScroll在ListView中多次调用

时间:2014-11-14 19:43:55

标签: android listview android-listview

使用它时,如果我滚动少量,为什么onScroll()调用20次左右,即每次firstVisibleItem 5-6次。为什么不为每个滚动动作调用一次?

listView.setOnScrollListener(new OnScrollListener() {

            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

                Log.d("hey","called"+firstVisibleItem);
            }

            public void onScrollStateChanged(AbsListView view, int scrollState) {


                }
            }
        });

1 个答案:

答案 0 :(得分:0)

如果你看一下ListView的实现,你可以看到mOnScrollListener.onScroll在ListView中只被调用一次,实际上是invokeOnItemScrollListener()方法。

void invokeOnItemScrollListener() {
    if (mFastScroll != null) {
        mFastScroll.onScroll(mFirstPosition, getChildCount(), mItemCount);
    }
    if (mOnScrollListener != null) {
        mOnScrollListener.onScroll(this, mFirstPosition, getChildCount(), mItemCount);
    }
    onScrollChanged(0, 0, 0, 0); // dummy values, View's implementation does not use these.
}

因此,让我们尝试找一些invokeOnItemScrollListener()的用法。我们得到了很多,包括AbsListView中的用法。在AbsListView中,每次invokeOnItemScrollListener()方法都间接调用onTouchMove。所以现在,应该清楚为什么你多次收到onScroll回调。