2010-06-09 15 views
12

Tôi gặp sự cố với phiên bản Android 2.1. Nó trông giống như một con bọ.android: AbsListView.OnScrollListener SCROLL_STATE_IDLE không được gọi sau SCROLL_STATE_TOUCH_SCROLL (Phiên bản 2.1)

Tôi đã đính kèm một OnScrollListener vào danh sáchXem của mình.

Tôi đang sử dụng phương pháp onScrollStateChanged(AbsListView view, int scrollState) để theo dõi trạng thái danh sách xem danh sách của tôi.

Các scrollstate có thể giả định 3 giá trị (lấy từ tài liệu):

  1. SCROLL_STATE_FLING: Người dùng đã trước đây đã được di chuyển bằng cảm ứng và đã thực hiện một fling. Ảnh động hiện đang dừng ở một góc dừng
  2. SCROLL_STATE_IDLE: Chế độ xem không phải là cuộn. Lưu ý điều hướng danh sách bằng cách sử dụng số lượng bi xoay là ở trạng thái không hoạt động vì các chuyển đổi này không hoạt ảnh.
  3. SCROLL_STATE_TOUCH_SCROLL: Người dùng được di chuyển bằng cảm ứng, và ngón tay của họ vẫn là trên màn hình

Tôi giả định rằng SCROLL_STATE_IDLE sẽ luôn được thông qua sau khi một trong hai trạng thái khác. Nó luôn luôn đúng trừ phiên bản Android 2.1. SCROLL_STATE_IDLE không được thông qua sau SCROLL_STATE_TOUCH_SCROLL Sự cố cũng xảy ra nếu bạn ngừng trượt bằng một lần chạm thay vì để bản thân cuộn dừng lại. Hành vi lạ này rời khỏi listView của tôi ở trạng thái không đồng bộ.

Someonelse có cùng vấn đề? Đề xuất cho công việc "không phải là bẩn" xung quanh?

+0

Nó không được cố định chưa? – st0le

Trả lời

2

Tôi gặp vấn đề tương tự trên 2.2.

Nếu danh sách đủ lớn và tôi cuộn xuống dưới, tôi đã nhận được CROLL_STATE_TOUCH_SCROLL đầu tiên trong khi ngón tay của tôi nằm trên màn hình. Khi ngón tay của tôi rời khỏi màn hình, tôi đã nhận được SCROLL_STATE_FLING. Khi chế độ xem của tôi đã ngừng di chuyển, tôi đã nhận được SCROLL_STATE_IDLE.

Tuy nhiên, nếu trong khi cuộn, nó đạt đến Xem hoặc Trên cùng, tôi chỉ cuộn/trượt giá trị và không bao giờ ở chế độ chờ.

Tôi đã kiểm tra Kệ dự án từ Romain Guy và triển khai của anh ấy cũng gặp phải vấn đề tương tự trên 2.2.x Tôi tự hỏi liệu anh ấy có nhận thấy chưa.

tôi đã không cố gắng nhưng với 2.3.x

2

tôi tìm thấy một cái gì đó của một workaround cho điều này (ít nhất là cho cấp API 9+, nơi Tôi vẫn thấy lỗi). Tôi đang sử dụng một GridView, nhưng tôi tin rằng điều này cũng nên làm việc cho ListView.

Tôi đang sử dụng một lớp con của GridView nơi tôi phát hiện các thanh cuộn (trên hoặc dưới):

public class CustomGridView { 
    private boolean mIsOverScrolled = false; 

    @Override 
    protected void onOverScrolled(int scrollX, int scrollY, 
         boolean clampedX, boolean clampedY) { 
    mIsOverScrolled = true; 
    super.onOverScrolled(scrollX, scrollY, clampedX, clampedY); 
    } 

    public boolean isOverScrolled() { 
    return mOsOverScrolled; 
    } 

    public void clearOverScroll() { 
    mIsOverScrolled = false; 
    } 
} 

Sau đó, trong OnScrollListener của tôi về CustomGridView, tôi có:

@Override 
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, 
          int totalItemCount) { 
    if (gridView.isOverScrolled()) { 
    gridView.clearOverScroll(); 
    } 

    // ... 
} 

Bây giờ khi tôi đang kiểm tra OnScrollListener.SCROLL_STATE_IDLE, tôi cũng kiểm tra xem !gridView.isOverScrolled(). Tôi không chắc liệu điều đó có khắc phục được các trường hợp sử dụng cụ thể của bạn hay không, nhưng hy vọng bạn có thể sử dụng phần thông tin bổ sung để xác định trạng thái hiện tại của bạn bất chấp lỗi đó.

0

Tôi đã có vấn đề này cùng và đăng một workaround vào danh sách lỗi được đề cập bởi DeRagan: Link

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