Android smoothScrollTo不调用onScrollStateChanged

sty*_*972 6 android listview scroll event-driven

smoothScrollBy()用来滚动到一个特定的位置ListView.我希望在ListView完成滚动时得到通知,将其与onScrollStateChanged()当用户用手指滚动时触发的当前事件集成.

目前我使用的Timer是在平滑滚动的持续时间之后运行100ms,但这不是我喜欢的事件驱动.

sau*_*wer 2

如果您已为列表视图实现了 OnScrollListener,则可以监视 ScrollState 何时发生变化。当您调用 smoothScrollBy() 时,使用设置为 true 的全局布尔值 (isScrolling),然后在 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) {

}
});
Run Code Online (Sandbox Code Playgroud)

  • 根据我的经验,“smoothScrollBy()”不会调用“onScrollStateChanged()”,并且此时我正在使用“Timer”在滚动完成后进行轮询。 (2认同)