使用它时,如果我滚动少量,为什么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) {
}
}
});
答案 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
回调。