Android smoothScrollTo不调用onScrollStateChanged

时间:2011-09-28 15:35:35

标签: android listview scroll event-driven

我正在使用smoothScrollBy()滚动到ListView中的特定位置。我希望在ListView完成滚动时收到通知,将其与当用户用手指滚动时触发的当前onScrollStateChanged()事件进行整合。

目前我正在使用在平滑滚动的持续时间后运行100毫秒的Timer,但这不是我想要的事件驱动。

1 个答案:

答案 0 :(得分:2)

如果您已为列表视图实现了OnScrollListener,则可以查看ScrollState何时更改。调用smoothScrollBy()时将全局布尔值(isScrolling)设置为true,然后在OnScrollListener注册SCROLL_STATE_IDLE的ScrollState时将其设置为false。

sidebar1.smoothScrollToPositionFromTop(currentPosition, 0, 500);
isScrolling = true;

sidebar1.setOnScrollListener(new OnScrollListener() {

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
    if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) {
        isScrolling = false;
    }

}

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

}
});