2011-09-28 23 views
5

Tôi đang sử dụng smoothScrollBy() để cuộn đến một vị trí cụ thể trong một ListView. Tôi muốn được thông báo khi di chuyển xong ListView để tích hợp nó với sự kiện onScrollStateChanged() hiện tại được kích hoạt khi người dùng cuộn bằng ngón tay của họ.Android smoothScrollĐể không gọi onScrollStateChanged

Hiện tại tôi đang sử dụng Timer chạy 100ms sau khoảng thời gian cuộn trơn tru, nhưng đó không phải là sự kiện được điều khiển theo ý muốn.

+1

Tôi có thể khẳng định từ gỡ lỗi của riêng tôi rằng 'smoothScroll * 'chức năng sẽ không kích hoạt những thay đổi trạng thái di chuyển, và do đó làm cho' OnScrollListener.onScrollStateChanged()' callbacks vô dụng. – ohhorob

Trả lời

2

Nếu bạn đã triển khai OnScrollListener cho danh sách xem của mình, bạn có thể xem khi nào ScrollState thay đổi. Sử dụng một boolean toàn cầu (isScrolling) thiết lập để đúng khi bạn gọi smoothScrollBy() và sau đó đặt nó thành false khi OnScrollListener đăng ký một ScrollState của SCROLL_STATE_IDLE.

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

Thật không may 'smoothScrollToPositionFromTop' đến tại API 11. – styler1972

+0

Đúng, nhưng không phải là bạn chỉ muốn được thông báo khi cuộn xong? Bạn sẽ có thể sử dụng hàm smoothScrollBy và thực hiện trình lắng nghe kết hợp với một vòng lặp while liên tục thăm dò trạng thái isScrolling. – saulpower

+2

Từ kinh nghiệm của tôi, 'smoothScrollBy()' không gọi 'onScrollStateChanged()', và vào lúc này, tôi đang sử dụng một 'Timer' để thăm dò ý kiến ​​khi việc cuộn được thực hiện. – styler1972

Các vấn đề liên quan