ºÇ½ª¹¹¿·¡§
t_yokky2002 2011ǯ12·î15Æü(ÌÚ) 11:59:37ÍúÎò
¼¡¤ÎÆâÍƤ˽¤Àµ¤·¤Æ¤¯¤À¤µ¤¤¡£
public class TweetTimeLinelTask extends AsyncTask<String, Void, QueryResult> { private static final String TAG = "TweetTimeLinelTask"; private Timer mUpdateListViewTimer; private ProgressBar mProgressBar; private static long mSinceId = -1; private static MainActivity mActivity; private LinkedList<Tweet> mCacheTweets = new LinkedList<Tweet>(); private ListView mListView; private LinkedList<Tweet> mTweets; private TweetAdapter mAdapter; private Handler mTimeLineHandler = new Handler(); // tweet¥ê¥¹¥È¥Ó¥å¡¼¤Ø¤Î¹¹¿·½èÍý private Runnable mTimeLineRunnable = new Runnable() { @Override public void run() { if (mCacheTweets.size() > 0) { // ¥¹¥¯¥í¡¼¥ëÃæ¤Ï¡¢¥ê¥¹¥È¤Î¹¹¿·¤ò¹Ô¤ï¤Ê¤¤ if (scrollInMiddle()) { return; } Tweet tweet = mCacheTweets.removeLast(); mTweets.add(0, tweet); if (mTweets.size() > Constant.SIZE_PER_PAGE) { mTweets.removeLast(); } mAdapter.notifyDataSetChanged(); } else { // tweet¤¬0·ï¤À¤Ã¤¿¾ì¹ç¤Ï¡¢¥ê¥¹¥È¹¹¿·¥¿¥¤¥Þ¡¼¤ò¥¥ã¥ó¥»¥ë¤¹¤ë mUpdateListViewTimer.cancel(); mActivity.setmHasUpdateListViewTimer(false); } } private boolean scrollInMiddle() { int firstVisiblePosition = mListView.getFirstVisiblePosition(); int lastVisiblePosition = mListView.getLastVisiblePosition(); int count = mAdapter.getCount(); return count > 0 && firstVisiblePosition != 0 && (lastVisiblePosition != count - 1 || count != Constant.SIZE_PER_PAGE); } }; public TweetTimeLinelTask() { } public TweetTimeLinelTask(MainActivity activity) { mActivity = activity; mProgressBar = activity.getmProgressBar(); mListView = activity.getmListView(); mAdapter = activity.getmAdapter(); mTweets = activity.getmTweets(); mUpdateListViewTimer = activity.getmUpdateListViewTimer(); } @Override protected void onPreExecute() { // ¥×¥í¥°¥ì¥¹¥Ð¡¼¤òɽ¼¨¤µ¤»¤ë mProgressBar.setVisibility(View.VISIBLE); } @Override protected QueryResult doInBackground(String... params) { QueryResult result; try { // tweeter4j¤òÍøÍѤ·¡¢ÆÃÄê¤Î¥Ï¥Ã¥·¥å¥¿¥°¤¬¤Ä¤¤¤¿tweet¤ò¼èÆÀ¤¹¤ë Query query = new Query(params[0]); query.setPage(1); if (mSinceId != -1 && mSinceId != 0) { query.setSinceId(mSinceId); } query.setRpp(Constant.SIZE_PER_PAGE); result = new TwitterManager().search(query); } catch (TwitterException e) { Log.d(TAG, "error", e); result = null; } return result; } @Override protected void onPostExecute(QueryResult result) { // ¥×¥í¥°¥ì¥¹¥Ð¡¼¤òÈóɽ¼¨¤Ë¤¹¤ë mProgressBar.setVisibility(View.GONE); if (result == null) { if (mActivity.isFinishing() && mActivity.isCurrent()) { mActivity.showDialog(Constant.ALERT_DIALOG_NET_WARNING); } } else { List<Tweet> newTweets = result.getTweets(); mSinceId = result.getMaxId(); mCacheTweets.addAll(0, newTweets); if (!mActivity.ismHasUpdateListViewTimer()) { // tweet¥ê¥¹¥È¹¹¿·¥¿¥¹¥¯¤ò¥»¥Ã¥È¤¹¤ë mUpdateListViewTimer = new Timer(); TimerTask task = new TimerTask() { @Override public void run() { mTimeLineHandler.post(mTimeLineRunnable); } }; mUpdateListViewTimer.schedule(task, 0, Constant.SHOW_TIMELINE_IN_LISTVIEW); mActivity.setmHasUpdateListViewTimer(true); } } mActivity.setIsFirstLoading(false); } }
¥³¥á¥ó¥È¤ò¤«¤¯