我正在尝试在滚动停止后执行某些操作。因此,我尝试使用OnScrollListener#onScrollStateChanged(SCROLL_STATE_IDLE)
来检测滚动何时停止(无论是TOUCH_SCROLL或FLING
)(在1.5上按预期运行)。但是当它在2.0上运行时,在释放手指后,onScrollStateChanged无法接收事件。是否有任何回调或方法可以检测该事件?
尝试使用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...");
}
}
});
关键是要追踪用户何时在快速滑动,何时不在。因为像你说的那样,从用手指滚动到停止的转换是没有记录的,所以这似乎是唯一可以区分的情况。以下是我所说的内容:
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());
}
}