2011-09-28 18 views
5

我正在使用smoothScrollBy()滾動到ListView中的特定位置。我希望在滾動完成ListView時將其通知,以便將其與當用戶用手指滾動時觸發的當前onScrollStateChanged()事件整合。Android smoothScrollTo not invoking onScrollStateChanged

目前我使用Timer,它在光滑滾動的持續時間後運行100毫秒,但這不像我更喜歡的事件驅動。

+1

我可以從我自己調試了'smoothScroll *'功能將不會觸發滾動狀態變化,因此呈現'OnScrollListener.onScrollStateChanged()'回調沒用確認。 – ohhorob

回答

2

如果您已經爲您的listview實現了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) { 

} 
}); 
+0

不幸的是'smoothScrollToPositionFromTop'出現在API 11中。 – styler1972

+0

是的,但是您是不是隻是希望在滾動完成時收到通知?您應該能夠使用smoothScrollBy並將偵聽器與連續輪詢isScrolling狀態的while循環結合使用。 – saulpower

+2

根據我的經驗,'smoothScrollBy()'不會調用'onScrollStateChanged()',並且此時我正在使用'Timer'來輪詢應該完成的輪詢。 – styler1972