InfoActivity.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498
  1. package com.ouling.weibo;
  2. import java.util.ArrayList;
  3. import java.util.Arrays;
  4. import java.util.List;
  5. import android.app.AlertDialog;
  6. import android.app.NotificationManager;
  7. import android.app.TabActivity;
  8. import android.content.DialogInterface;
  9. import android.content.Intent;
  10. import android.os.Bundle;
  11. import android.os.Handler;
  12. import android.os.Message;
  13. import android.util.Log;
  14. import android.view.Menu;
  15. import android.view.MenuItem;
  16. import android.view.MenuItem.OnMenuItemClickListener;
  17. import android.view.View;
  18. import android.view.View.OnClickListener;
  19. import android.widget.AdapterView;
  20. import android.widget.AdapterView.OnItemClickListener;
  21. import android.widget.FrameLayout;
  22. import android.widget.TabHost;
  23. import android.widget.TabHost.OnTabChangeListener;
  24. import android.widget.TabHost.TabContentFactory;
  25. import android.widget.TabHost.TabSpec;
  26. import android.widget.TabWidget;
  27. import android.widget.Toast;
  28. import com.ouling.weibo.OAuth.OAuthConstant;
  29. import com.ouling.weibo.basic.Comment;
  30. import com.ouling.weibo.basic.Status;
  31. import com.ouling.weibo.basic.Weibo;
  32. import com.ouling.weibo.basic.WeiboException;
  33. import com.ouling.weibo.basic.WeiboResponse;
  34. import com.ouling.weibo.util.InfoHelper;
  35. import com.ouling.weibo.util.AutoGetMoreListView;
  36. import com.ouling.weibo.util.WaitingView;
  37. /**
  38. * 显示评论(包括发出和收到)以及@我的列表
  39. *
  40. *
  41. */
  42. public class InfoActivity extends TabActivity implements TabContentFactory,
  43. OnTabChangeListener, OnMenuItemClickListener {
  44. private TabHost tabHost;
  45. private FrameLayout frameLayout;
  46. private AutoGetMoreListView autoGetMoreListView;
  47. private WeiboAdapter infoAdapter;
  48. private List<WeiboResponse> commentToMe = new ArrayList<WeiboResponse>();
  49. private List<WeiboResponse> commentByMe = new ArrayList<WeiboResponse>();
  50. private List<WeiboResponse> mentions = new ArrayList<WeiboResponse>();
  51. private boolean[] isCompleted = new boolean[3];
  52. private boolean[] isRunning = new boolean[3];
  53. private boolean isFirst;
  54. private int preIndex;
  55. private int[] preListIndex = new int[3];
  56. private WaitingView waitingView;
  57. private Runnable[] runnables = new Runnable[3];
  58. private static String[] texts = new String[] { "“我收到的评论”", "“我发出的评论”",
  59. "“获取“@我的微博”" };
  60. private Handler handler = new Handler() {
  61. @Override
  62. public void handleMessage(Message msg) {
  63. super.handleMessage(msg);
  64. isRunning[msg.arg1] = false;
  65. switch (msg.what) {
  66. case InfoHelper.LOADING_DATA_FAILED:
  67. Toast.makeText(InfoActivity.this,
  68. "刷新" + texts[msg.arg1] + "失败, 可通过menu键刷新",
  69. Toast.LENGTH_LONG).show();
  70. break;
  71. case InfoHelper.LOADING_DATA_COMPLETED:
  72. isCompleted[msg.arg1] = true;
  73. infoAdapter.notifyDataSetChanged();
  74. Log.d("tabHost.getCurrentTab(): " + tabHost.getCurrentTab(),
  75. "msg.arg1: " + msg.arg1);
  76. if (tabHost.getCurrentTab() == msg.arg1) {
  77. Log.d("setVisibility", "setVisibility");
  78. waitingView.setVisibility(View.GONE);
  79. autoGetMoreListView.setVisibility(View.VISIBLE);
  80. // autoGetMoreListView.setSelection(1);
  81. // 不知道为什么第一次启动这个TabActivity的时候,infoAdapter.notifyDataSetChanged()没作用,通过这种方式可以解决,但是并不好
  82. if (isFirst) {
  83. isFirst = false;
  84. tabHost.setCurrentTab((msg.arg1 + 1) % 3);
  85. tabHost.setCurrentTab(msg.arg1);
  86. }
  87. }
  88. Toast.makeText(InfoActivity.this,
  89. "刷新" + texts[msg.arg1] + "完成", Toast.LENGTH_LONG)
  90. .show();
  91. break;
  92. }
  93. }
  94. };
  95. @Override
  96. public void onCreate(Bundle savedInstanceState) {
  97. super.onCreate(savedInstanceState);
  98. // setContentView(R.layout.tabactivity);
  99. isFirst = true;
  100. Arrays.fill(isCompleted, false);
  101. Arrays.fill(isRunning, false);
  102. Arrays.fill(preListIndex, 1);
  103. System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);
  104. System.setProperty("weibo4j.oauth.consumerSecret",
  105. Weibo.CONSUMER_SECRET);
  106. // frameLayout = (FrameLayout) findViewById(android.R.id.tabcontent);
  107. frameLayout = new FrameLayout(this);
  108. autoGetMoreListView = new AutoGetMoreListView(this);
  109. waitingView = new WaitingView(this);
  110. frameLayout.addView(autoGetMoreListView);
  111. frameLayout.addView(waitingView);
  112. autoGetMoreListView.setVisibility(View.GONE);
  113. waitingView.setVisibility(View.VISIBLE);
  114. infoAdapter = new WeiboAdapter(commentByMe, this, 0,
  115. autoGetMoreListView);
  116. autoGetMoreListView.setAdapter(infoAdapter);
  117. autoGetMoreListView.setOnItemClickListener(itemClickListener);
  118. autoGetMoreListView.setOnRefreshListener(infoAdapter);
  119. autoGetMoreListView.setOnGetMoreListener(infoAdapter);
  120. initThread();
  121. initTabHost();
  122. Bundle bundle = this.getIntent().getExtras();
  123. int type = 0;
  124. if (bundle != null) {
  125. type = bundle.getInt("type", 0);
  126. NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
  127. if (type == 0)
  128. notificationManager.cancel(MainActivity.UNREAD_COMMENT);
  129. else if (type == 2)
  130. notificationManager.cancel(MainActivity.UNREAD_MENTION);
  131. }
  132. preIndex = type;
  133. tabHost.setCurrentTab(type);
  134. switch (type) {
  135. case 0:
  136. infoAdapter.setCurList(commentByMe);
  137. break;
  138. case 1:
  139. infoAdapter.setCurList(commentToMe);
  140. break;
  141. case 2:
  142. infoAdapter.setCurList(mentions);
  143. break;
  144. }
  145. infoAdapter.setType(type);
  146. infoAdapter.notifyDataSetChanged();
  147. }
  148. // 设置界面
  149. private void initTabHost() {
  150. setContentView(R.layout.infortab);
  151. tabHost = this.getTabHost();
  152. TabSpec ts1 = tabHost.newTabSpec("COMMENT_TO_ME").setIndicator("收到的评论")
  153. .setContent(this);
  154. tabHost.addTab(ts1);
  155. TabSpec ts2 = tabHost.newTabSpec("COMMENT_BY_ME").setIndicator("发出的评论");
  156. ts2.setContent(this);
  157. tabHost.addTab(ts2);
  158. TabSpec ts3 = tabHost.newTabSpec("MENTION").setIndicator("@我")
  159. .setContent(this);
  160. tabHost.addTab(ts3);
  161. tabHost.setOnTabChangedListener(this);
  162. TabWidget widget = tabHost.getTabWidget();
  163. for (int i = 0; i < 3; i++) {
  164. View view = widget.getChildAt(i);
  165. view.setBackgroundResource(R.drawable.widget_btn);
  166. final int index = i;
  167. view.setOnClickListener(new OnClickListener() {
  168. @Override
  169. public void onClick(View v) {
  170. if (tabHost.getCurrentTab() == index) {
  171. autoGetMoreListView.setSelection(1);
  172. preListIndex[index] = 1;
  173. } else {
  174. preListIndex[preIndex] = autoGetMoreListView
  175. .getFirstVisiblePosition();
  176. tabHost.setCurrentTab(index);
  177. if (isCompleted[index]) {
  178. waitingView.setVisibility(View.GONE);
  179. autoGetMoreListView.setVisibility(View.VISIBLE);
  180. } else {
  181. waitingView.setVisibility(View.VISIBLE);
  182. autoGetMoreListView.setVisibility(View.GONE);
  183. }
  184. switch (index) {
  185. case 0:
  186. infoAdapter.setCurList(commentToMe);
  187. break;
  188. case 1:
  189. infoAdapter.setCurList(commentByMe);
  190. break;
  191. case 2:
  192. infoAdapter.setCurList(mentions);
  193. break;
  194. }
  195. infoAdapter.setType(index);
  196. infoAdapter.notifyDataSetChanged();
  197. if (preListIndex[index] < infoAdapter.getCount() + 2)
  198. autoGetMoreListView
  199. .setSelection(preListIndex[index]);
  200. }
  201. Log.d("preIndex: " + preIndex, "index: " + index);
  202. preIndex = index;
  203. for (int i = 0; i < 3; i++) {
  204. Log.d("preListIndex " + i, preListIndex[i] + "");
  205. }
  206. }
  207. });
  208. }
  209. }
  210. @Override
  211. public boolean onCreateOptionsMenu(Menu menu) {
  212. for (int i = 1; i <= 3; i++)
  213. menu.add(1, i, i, "刷新" + texts[i - 1]).setOnMenuItemClickListener(
  214. this);
  215. menu.add(1, 4, 4, "刷新全部").setOnMenuItemClickListener(this);
  216. menu.add(1, 5, 5, "发微博").setIntent(
  217. new Intent(this, ShareActivity.class));
  218. return true;
  219. }
  220. @Override
  221. public boolean onMenuItemClick(MenuItem item) {
  222. if (item.getItemId() > 4)
  223. return false;
  224. if (item.getItemId() != 4) {
  225. if (!isRunning[item.getItemId() - 1]) {
  226. new Thread(runnables[item.getItemId() - 1]).start();
  227. isRunning[item.getItemId() - 1] = true;
  228. }
  229. } else {
  230. for (int i = 0; i < 3; i++) {
  231. if (!isRunning[i]) {
  232. new Thread(runnables[i]).start();
  233. isRunning[i] = true;
  234. }
  235. }
  236. }
  237. return true;
  238. }
  239. @Override
  240. public View createTabContent(String tag) {
  241. if (!isRunning[tabHost.getCurrentTab()]) {
  242. new Thread(runnables[tabHost.getCurrentTab()]).start();
  243. isRunning[tabHost.getCurrentTab()] = true;
  244. }
  245. return frameLayout;
  246. }
  247. @Override
  248. public void onTabChanged(String tabId) {
  249. if (isCompleted[tabHost.getCurrentTab()]) {
  250. waitingView.setVisibility(View.GONE);
  251. autoGetMoreListView.setVisibility(View.VISIBLE);
  252. } else {
  253. waitingView.setVisibility(View.VISIBLE);
  254. autoGetMoreListView.setVisibility(View.GONE);
  255. }
  256. if (tabId.equals("COMMENT_BY_ME"))
  257. infoAdapter.setCurList(commentByMe);
  258. else if (tabId.equals("COMMENT_TO_ME"))
  259. infoAdapter.setCurList(commentToMe);
  260. else
  261. infoAdapter.setCurList(mentions);
  262. infoAdapter.setType(InfoActivity.this.getTabHost().getCurrentTab());
  263. infoAdapter.notifyDataSetChanged();
  264. }
  265. private void initThread() {
  266. runnables[0] = new Runnable() {
  267. @Override
  268. public void run() {
  269. Message msg = new Message();
  270. try {
  271. Weibo weibo = OAuthConstant.getInstance().getWeibo();
  272. commentToMe.clear();
  273. commentToMe.addAll(weibo.getCommentsToMe());
  274. msg.what = InfoHelper.LOADING_DATA_COMPLETED;
  275. } catch (WeiboException e) {
  276. e.printStackTrace();
  277. msg.what = InfoHelper.LOADING_DATA_FAILED;
  278. }
  279. msg.arg1 = 0;
  280. handler.sendMessage(msg);
  281. }
  282. };
  283. runnables[1] = new Runnable() {
  284. @Override
  285. public void run() {
  286. Message msg = new Message();
  287. try {
  288. Weibo weibo = OAuthConstant.getInstance().getWeibo();
  289. commentByMe.clear();
  290. commentByMe.addAll(weibo.getCommentsByMe());
  291. msg.what = InfoHelper.LOADING_DATA_COMPLETED;
  292. } catch (WeiboException e) {
  293. e.printStackTrace();
  294. msg.what = InfoHelper.LOADING_DATA_FAILED;
  295. }
  296. msg.arg1 = 1;
  297. handler.sendMessage(msg);
  298. }
  299. };
  300. runnables[2] = new Runnable() {
  301. @Override
  302. public void run() {
  303. Message msg = new Message();
  304. try {
  305. Weibo weibo = OAuthConstant.getInstance().getWeibo();
  306. mentions.clear();
  307. mentions.addAll(weibo.getMentions());
  308. msg.what = InfoHelper.LOADING_DATA_COMPLETED;
  309. } catch (WeiboException e) {
  310. e.printStackTrace();
  311. msg.what = InfoHelper.LOADING_DATA_FAILED;
  312. }
  313. msg.arg1 = 2;
  314. handler.sendMessage(msg);
  315. }
  316. };
  317. }
  318. //对点击处理
  319. private OnItemClickListener itemClickListener = new OnItemClickListener() {
  320. @Override
  321. public void onItemClick(AdapterView<?> parent, View view,
  322. final int position, long id) {
  323. new AlertDialog.Builder(InfoActivity.this).setItems(
  324. new CharSequence[] { "评论", "查看原微博", "查看个人资料" },
  325. new DialogInterface.OnClickListener() {
  326. @Override
  327. public void onClick(DialogInterface dialog, int which) {
  328. if (which == 2) {
  329. Intent intent = new Intent(InfoActivity.this,
  330. UserInfo.class);
  331. switch (tabHost.getCurrentTab()) {
  332. case 0:
  333. if (position > commentToMe.size() - 1)
  334. return;
  335. intent.putExtra(
  336. "cid",
  337. ((Comment) commentToMe
  338. .get(position - 1))
  339. .getUser().getId()
  340. + "");
  341. break;
  342. case 1:
  343. if (position > commentByMe.size() - 1)
  344. return;
  345. intent.putExtra(
  346. "cid",
  347. ((Comment) commentByMe
  348. .get(position - 1))
  349. .getUser().getId()
  350. + "");
  351. break;
  352. case 2:
  353. if (position > mentions.size() - 1)
  354. return;
  355. intent.putExtra(
  356. "cid",
  357. ((Status) mentions
  358. .get(position - 1))
  359. .getUser().getId()
  360. + "");
  361. break;
  362. }
  363. startActivity(intent);
  364. return;
  365. }
  366. if (which == 0) {
  367. switch (tabHost.getCurrentTab()) {
  368. case 0:
  369. if (position > commentToMe.size() - 1)
  370. return;
  371. new CommentMentionDialog(InfoActivity.this,
  372. true, ((Comment) commentToMe
  373. .get(position - 1))
  374. .getStatus().getId(),
  375. ((Comment) commentToMe
  376. .get(position - 1)).getId()
  377. + "");
  378. break;
  379. case 1:
  380. if (position > commentByMe.size() - 1)
  381. return;
  382. new CommentMentionDialog(InfoActivity.this,
  383. true, ((Comment) commentByMe
  384. .get(position - 1))
  385. .getStatus().getId(),
  386. ((Comment) commentByMe
  387. .get(position - 1)).getId()
  388. + "");
  389. break;
  390. case 2:
  391. if (position > mentions.size() - 1)
  392. return;
  393. new CommentMentionDialog(
  394. InfoActivity.this,
  395. true,
  396. (((Status) mentions
  397. .get(position - 1)).getId()),
  398. null);
  399. break;
  400. }
  401. return;
  402. }
  403. Intent intent = new Intent(InfoActivity.this,
  404. ViewActivity.class);
  405. switch (tabHost.getCurrentTab()) {
  406. case 0:
  407. if (position > commentToMe.size() - 1)
  408. return;
  409. intent.putExtra("cid", ((Comment) commentToMe
  410. .get(position - 1)).getStatus().getId());
  411. break;
  412. case 1:
  413. if (position > commentByMe.size() - 1)
  414. return;
  415. intent.putExtra("cid", ((Comment) commentByMe
  416. .get(position - 1)).getStatus().getId());
  417. break;
  418. case 2:
  419. if (position > mentions.size() - 1)
  420. return;
  421. intent.putExtra("cid", ((Status) mentions
  422. .get(position - 1)).getId());
  423. break;
  424. default:
  425. return;
  426. }
  427. InfoActivity.this.startActivity(intent);
  428. }
  429. }).show();
  430. }
  431. };
  432. }