package com.shejiaomao.weibo.service.listener; import android.content.Context; import android.os.AsyncTask.Status; import android.util.Log; import android.view.View; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import com.shejiaomao.weibo.SheJiaoMaoApplication; import com.shejiaomao.weibo.service.adapter.StatusHolder; import com.shejiaomao.weibo.service.task.ImageLoad4ThumbnailTask; import com.shejiaomao.weibo.service.task.QueryResponseCountTask; public class StatusScrollListener implements OnScrollListener { private static final String TAG = "StatusScrollListener"; private int scrollState = OnScrollListener.SCROLL_STATE_IDLE; @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { displayImage(view); } } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { this.scrollState = scrollState; switch (scrollState) { case OnScrollListener.SCROLL_STATE_IDLE: //Log.v(TAG, "已经停止:SCROLL_STATE_IDLE" + "-->" + view.getCount()); Context context = view.getContext(); SheJiaoMaoApplication sheJiaoMao = (SheJiaoMaoApplication) context.getApplicationContext(); if (view.getLastVisiblePosition() == view.getCount() - 1 && sheJiaoMao.isAutoLoadMore()) { view.getChildAt(view.getChildCount() - 1).performClick(); } displayImage(view); break; case OnScrollListener.SCROLL_STATE_TOUCH_SCROLL: //Log.v(TAG, "SCROLL_STATE_TOUCH_SCROLL:当屏幕滚动且用户使用的触碰或手指还在屏幕上时为1"); break; case OnScrollListener.SCROLL_STATE_FLING: //Log.v(TAG, "SCROLL_STATE_FLING:由于用户的操作,屏幕产生惯性滑动时为2"); break; } } private void displayImage(AbsListView listView) { int firstPos = listView.getFirstVisiblePosition(); int lastPos = listView.getLastVisiblePosition(); int totalCount = lastPos - firstPos + 1; Log.v(TAG, "滚动停止加载图片.."); for (int i = 0; i < totalCount; i++) { View view = listView.getChildAt(i); Object tag = view.getTag(); if (!(tag instanceof StatusHolder)) { continue; } StatusHolder holder = (StatusHolder)view.getTag(); ImageLoad4ThumbnailTask thumbnailTask = holder.thumbnailTask; if (thumbnailTask != null && thumbnailTask.isCancelled() == false && thumbnailTask.getStatus() == Status.PENDING) { thumbnailTask.execute(); } QueryResponseCountTask responseCountTask = holder.responseCountTask; if (responseCountTask != null && responseCountTask.isCancelled() == false && responseCountTask.getStatus() == Status.PENDING) { responseCountTask.execute(); } } } }