2009-11-20 128 views
26

我試圖做一些事情後,滾動停止。所以,我試圖使用OnScrollListener#onScrollStateChanged(SCROLL_STATE_IDLE)來檢測滾動停止(TOUCH_SCROLL or FLING)(1.5時它是按我的預期運行)。 但是,當它在2.0上運行時,onScrollStateChanged無法在釋放手指後收到事件。是否有任何回調或無論如何檢測該事件?如何檢測Android ListView滾動停止?

+0

下面的答案是否可以接受?如果是,請接受,否則我會期待對答案的某種反饋;-) – 2010-07-30 17:34:03

回答

65

嘗試使用setOnScrollListener貫徹onScrollStateChanged與scrollState == 0 ...你需要做什麼......

setOnScrollListener(new OnScrollListener() { 
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 
     // TODO Auto-generated method stub 
    } 

    public void onScrollStateChanged(AbsListView view, int scrollState) { 
     if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { 
      Log.i("a", "scrolling stopped..."); 
     } 
    } 
}); 
+23

而不是硬編碼等於0,請使用OnScrollListener.SCROLL_STATE_IDLE 如果您嘗試檢測何時滾動停止...如果你正在嘗試檢測手指/背景沒有觸摸屏幕時,這將是一個不同的方法.. – 2009-11-25 22:14:26

+0

我剛剛用2.0測試了上面的代碼,它工作得很好...... – 2009-11-25 22:51:32

7

關鍵是要保持在用戶丟,當軌道他們不是。這似乎是你可以做出的唯一區別,因爲像你說的那樣,用手指滾動到空閒的轉換是記錄的而不是。這裏就是我說的:

public void onScrollStateChanged(AbsListView view, int scrollState) {  
    if (scrollState != OnScrollListener.SCROLL_STATE_FLING) { 
     flinging = false; 
     int count = view.getChildCount(); 

     for (int i = 0; i < count; i++) { 
      View convertView = view.getChildAt(i); 
      Recipe recipe = (Recipe) convertView.getTag(); 
      ImageView image = (ImageView) convertView.findViewById(R.id.icon); 

      if (recipe != null && recipe.getImageURL() != null) { 
       ImageLoader.loadImage(this, image, recipe.getImageURL()); 
      } 
     } 
    } else { 
     flinging = true; 
    } 
} 

然後在ListView適配器:

public View getView(int position, View convertView, ViewGroup parent) { 
    // Bunch of code.... 

    if (!flinging) { 
     ImageLoader.loadImage(BrowseRecipes.this, image, recipe.getImageURL()); 
    } 
} 

所以,與其反應,在聽者的變化,只是加載圖像(或者任何你需要首先要做到這一點),只要沒有發生。

這是全部從我的項目中取出:https://github.com/pkulak/mealfire_android