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