android: AbsListView.OnScrollListener SCROLL_STATE_IDLE is not called after SCROLL_STATE_TOUCH_SCROLL (Version 2.1)

后端 未结 4 1356
孤独总比滥情好
孤独总比滥情好 2021-02-04 10:31

I have a problem with android version 2.1. It looks like a bug.

I attached an OnScrollListener to my listView.

I\'m using the method onScrollS

相关标签:
4条回答
  • 2021-02-04 11:09

    I found something of a workaround for this (at least for API level 9+, where I'm still seeing the bug). I'm using a GridView, but I believe this should also work for ListView.

    I'm using a subclass of GridView where I am detecting the overscroll (top or bottom):

     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;
       }
     }
    

    Then, in my OnScrollListener of CustomGridView, I have:

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

    Now when I'm checking for OnScrollListener.SCROLL_STATE_IDLE, I also check if !gridView.isOverScrolled(). I'm not sure if that fixes your specific use cases, but hopefully you can use the additional piece of info to determine your current state despite the bug.

    0 讨论(0)
  • 2021-02-04 11:22

    I got a similar issue on 2.2.

    If the list is big enough, and I scroll down up, I got first CROLL_STATE_TOUCH_SCROLL while my finger is on the screen. When my finger leave the screen I got the SCROLL_STATE_FLING. When my view has stopped moving I got the SCROLL_STATE_IDLE.

    But, if during scroll, it reaches either View Top or Bottom, I only scroll/fling values and never the idle.

    I checked out Shelves project from Romain Guy and his implementation suffer the same issue on 2.2.x I'm wondering if he had noticed yet.

    I haven't tried yet with 2.3.x

    0 讨论(0)
  • 2021-02-04 11:28

    I think there is a bug that has been registered for this case.

    http://code.google.com/p/android/issues/detail?id=5086

    0 讨论(0)
  • 2021-02-04 11:32

    I have had this same problem and posted a workaround on the bug list mentioned by DeRagan: Link

    0 讨论(0)
提交回复
热议问题