123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498 |
- package com.ouling.weibo;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.List;
- import android.app.AlertDialog;
- import android.app.NotificationManager;
- import android.app.TabActivity;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.util.Log;
- import android.view.Menu;
- import android.view.MenuItem;
- import android.view.MenuItem.OnMenuItemClickListener;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.AdapterView;
- import android.widget.AdapterView.OnItemClickListener;
- import android.widget.FrameLayout;
- import android.widget.TabHost;
- import android.widget.TabHost.OnTabChangeListener;
- import android.widget.TabHost.TabContentFactory;
- import android.widget.TabHost.TabSpec;
- import android.widget.TabWidget;
- import android.widget.Toast;
- import com.ouling.weibo.OAuth.OAuthConstant;
- import com.ouling.weibo.basic.Comment;
- import com.ouling.weibo.basic.Status;
- import com.ouling.weibo.basic.Weibo;
- import com.ouling.weibo.basic.WeiboException;
- import com.ouling.weibo.basic.WeiboResponse;
- import com.ouling.weibo.util.InfoHelper;
- import com.ouling.weibo.util.AutoGetMoreListView;
- import com.ouling.weibo.util.WaitingView;
- /**
- * 显示评论(包括发出和收到)以及@我的列表
- *
- *
- */
- public class InfoActivity extends TabActivity implements TabContentFactory,
- OnTabChangeListener, OnMenuItemClickListener {
- private TabHost tabHost;
- private FrameLayout frameLayout;
- private AutoGetMoreListView autoGetMoreListView;
- private WeiboAdapter infoAdapter;
- private List<WeiboResponse> commentToMe = new ArrayList<WeiboResponse>();
- private List<WeiboResponse> commentByMe = new ArrayList<WeiboResponse>();
- private List<WeiboResponse> mentions = new ArrayList<WeiboResponse>();
- private boolean[] isCompleted = new boolean[3];
- private boolean[] isRunning = new boolean[3];
- private boolean isFirst;
- private int preIndex;
- private int[] preListIndex = new int[3];
- private WaitingView waitingView;
- private Runnable[] runnables = new Runnable[3];
- private static String[] texts = new String[] { "“我收到的评论”", "“我发出的评论”",
- "“获取“@我的微博”" };
- private Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- super.handleMessage(msg);
- isRunning[msg.arg1] = false;
- switch (msg.what) {
- case InfoHelper.LOADING_DATA_FAILED:
- Toast.makeText(InfoActivity.this,
- "刷新" + texts[msg.arg1] + "失败, 可通过menu键刷新",
- Toast.LENGTH_LONG).show();
- break;
- case InfoHelper.LOADING_DATA_COMPLETED:
- isCompleted[msg.arg1] = true;
- infoAdapter.notifyDataSetChanged();
- Log.d("tabHost.getCurrentTab(): " + tabHost.getCurrentTab(),
- "msg.arg1: " + msg.arg1);
- if (tabHost.getCurrentTab() == msg.arg1) {
- Log.d("setVisibility", "setVisibility");
- waitingView.setVisibility(View.GONE);
- autoGetMoreListView.setVisibility(View.VISIBLE);
- // autoGetMoreListView.setSelection(1);
- // 不知道为什么第一次启动这个TabActivity的时候,infoAdapter.notifyDataSetChanged()没作用,通过这种方式可以解决,但是并不好
- if (isFirst) {
- isFirst = false;
- tabHost.setCurrentTab((msg.arg1 + 1) % 3);
- tabHost.setCurrentTab(msg.arg1);
- }
- }
- Toast.makeText(InfoActivity.this,
- "刷新" + texts[msg.arg1] + "完成", Toast.LENGTH_LONG)
- .show();
- break;
- }
- }
- };
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- // setContentView(R.layout.tabactivity);
- isFirst = true;
- Arrays.fill(isCompleted, false);
- Arrays.fill(isRunning, false);
- Arrays.fill(preListIndex, 1);
- System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);
- System.setProperty("weibo4j.oauth.consumerSecret",
- Weibo.CONSUMER_SECRET);
- // frameLayout = (FrameLayout) findViewById(android.R.id.tabcontent);
- frameLayout = new FrameLayout(this);
- autoGetMoreListView = new AutoGetMoreListView(this);
- waitingView = new WaitingView(this);
- frameLayout.addView(autoGetMoreListView);
- frameLayout.addView(waitingView);
- autoGetMoreListView.setVisibility(View.GONE);
- waitingView.setVisibility(View.VISIBLE);
- infoAdapter = new WeiboAdapter(commentByMe, this, 0,
- autoGetMoreListView);
- autoGetMoreListView.setAdapter(infoAdapter);
- autoGetMoreListView.setOnItemClickListener(itemClickListener);
- autoGetMoreListView.setOnRefreshListener(infoAdapter);
- autoGetMoreListView.setOnGetMoreListener(infoAdapter);
- initThread();
- initTabHost();
- Bundle bundle = this.getIntent().getExtras();
- int type = 0;
- if (bundle != null) {
- type = bundle.getInt("type", 0);
- NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
- if (type == 0)
- notificationManager.cancel(MainActivity.UNREAD_COMMENT);
- else if (type == 2)
- notificationManager.cancel(MainActivity.UNREAD_MENTION);
- }
- preIndex = type;
- tabHost.setCurrentTab(type);
- switch (type) {
- case 0:
- infoAdapter.setCurList(commentByMe);
- break;
- case 1:
- infoAdapter.setCurList(commentToMe);
- break;
- case 2:
- infoAdapter.setCurList(mentions);
- break;
- }
- infoAdapter.setType(type);
- infoAdapter.notifyDataSetChanged();
- }
- // 设置界面
- private void initTabHost() {
- setContentView(R.layout.infortab);
- tabHost = this.getTabHost();
- TabSpec ts1 = tabHost.newTabSpec("COMMENT_TO_ME").setIndicator("收到的评论")
- .setContent(this);
- tabHost.addTab(ts1);
- TabSpec ts2 = tabHost.newTabSpec("COMMENT_BY_ME").setIndicator("发出的评论");
- ts2.setContent(this);
- tabHost.addTab(ts2);
- TabSpec ts3 = tabHost.newTabSpec("MENTION").setIndicator("@我")
- .setContent(this);
- tabHost.addTab(ts3);
- tabHost.setOnTabChangedListener(this);
- TabWidget widget = tabHost.getTabWidget();
- for (int i = 0; i < 3; i++) {
- View view = widget.getChildAt(i);
- view.setBackgroundResource(R.drawable.widget_btn);
- final int index = i;
- view.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (tabHost.getCurrentTab() == index) {
- autoGetMoreListView.setSelection(1);
- preListIndex[index] = 1;
- } else {
- preListIndex[preIndex] = autoGetMoreListView
- .getFirstVisiblePosition();
- tabHost.setCurrentTab(index);
- if (isCompleted[index]) {
- waitingView.setVisibility(View.GONE);
- autoGetMoreListView.setVisibility(View.VISIBLE);
- } else {
- waitingView.setVisibility(View.VISIBLE);
- autoGetMoreListView.setVisibility(View.GONE);
- }
- switch (index) {
- case 0:
- infoAdapter.setCurList(commentToMe);
- break;
- case 1:
- infoAdapter.setCurList(commentByMe);
- break;
- case 2:
- infoAdapter.setCurList(mentions);
- break;
- }
- infoAdapter.setType(index);
- infoAdapter.notifyDataSetChanged();
- if (preListIndex[index] < infoAdapter.getCount() + 2)
- autoGetMoreListView
- .setSelection(preListIndex[index]);
- }
- Log.d("preIndex: " + preIndex, "index: " + index);
- preIndex = index;
- for (int i = 0; i < 3; i++) {
- Log.d("preListIndex " + i, preListIndex[i] + "");
- }
- }
- });
- }
- }
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- for (int i = 1; i <= 3; i++)
- menu.add(1, i, i, "刷新" + texts[i - 1]).setOnMenuItemClickListener(
- this);
- menu.add(1, 4, 4, "刷新全部").setOnMenuItemClickListener(this);
- menu.add(1, 5, 5, "发微博").setIntent(
- new Intent(this, ShareActivity.class));
- return true;
- }
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- if (item.getItemId() > 4)
- return false;
- if (item.getItemId() != 4) {
- if (!isRunning[item.getItemId() - 1]) {
- new Thread(runnables[item.getItemId() - 1]).start();
- isRunning[item.getItemId() - 1] = true;
- }
- } else {
- for (int i = 0; i < 3; i++) {
- if (!isRunning[i]) {
- new Thread(runnables[i]).start();
- isRunning[i] = true;
- }
- }
- }
- return true;
- }
- @Override
- public View createTabContent(String tag) {
- if (!isRunning[tabHost.getCurrentTab()]) {
- new Thread(runnables[tabHost.getCurrentTab()]).start();
- isRunning[tabHost.getCurrentTab()] = true;
- }
- return frameLayout;
- }
- @Override
- public void onTabChanged(String tabId) {
- if (isCompleted[tabHost.getCurrentTab()]) {
- waitingView.setVisibility(View.GONE);
- autoGetMoreListView.setVisibility(View.VISIBLE);
- } else {
- waitingView.setVisibility(View.VISIBLE);
- autoGetMoreListView.setVisibility(View.GONE);
- }
- if (tabId.equals("COMMENT_BY_ME"))
- infoAdapter.setCurList(commentByMe);
- else if (tabId.equals("COMMENT_TO_ME"))
- infoAdapter.setCurList(commentToMe);
- else
- infoAdapter.setCurList(mentions);
- infoAdapter.setType(InfoActivity.this.getTabHost().getCurrentTab());
- infoAdapter.notifyDataSetChanged();
- }
- private void initThread() {
- runnables[0] = new Runnable() {
- @Override
- public void run() {
- Message msg = new Message();
- try {
- Weibo weibo = OAuthConstant.getInstance().getWeibo();
- commentToMe.clear();
- commentToMe.addAll(weibo.getCommentsToMe());
- msg.what = InfoHelper.LOADING_DATA_COMPLETED;
- } catch (WeiboException e) {
- e.printStackTrace();
- msg.what = InfoHelper.LOADING_DATA_FAILED;
- }
- msg.arg1 = 0;
- handler.sendMessage(msg);
- }
- };
- runnables[1] = new Runnable() {
- @Override
- public void run() {
- Message msg = new Message();
- try {
- Weibo weibo = OAuthConstant.getInstance().getWeibo();
- commentByMe.clear();
- commentByMe.addAll(weibo.getCommentsByMe());
- msg.what = InfoHelper.LOADING_DATA_COMPLETED;
- } catch (WeiboException e) {
- e.printStackTrace();
- msg.what = InfoHelper.LOADING_DATA_FAILED;
- }
- msg.arg1 = 1;
- handler.sendMessage(msg);
- }
- };
- runnables[2] = new Runnable() {
- @Override
- public void run() {
- Message msg = new Message();
- try {
- Weibo weibo = OAuthConstant.getInstance().getWeibo();
- mentions.clear();
- mentions.addAll(weibo.getMentions());
- msg.what = InfoHelper.LOADING_DATA_COMPLETED;
- } catch (WeiboException e) {
- e.printStackTrace();
- msg.what = InfoHelper.LOADING_DATA_FAILED;
- }
- msg.arg1 = 2;
- handler.sendMessage(msg);
- }
- };
- }
- //对点击处理
- private OnItemClickListener itemClickListener = new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view,
- final int position, long id) {
- new AlertDialog.Builder(InfoActivity.this).setItems(
- new CharSequence[] { "评论", "查看原微博", "查看个人资料" },
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- if (which == 2) {
- Intent intent = new Intent(InfoActivity.this,
- UserInfo.class);
- switch (tabHost.getCurrentTab()) {
- case 0:
- if (position > commentToMe.size() - 1)
- return;
- intent.putExtra(
- "cid",
- ((Comment) commentToMe
- .get(position - 1))
- .getUser().getId()
- + "");
- break;
- case 1:
- if (position > commentByMe.size() - 1)
- return;
- intent.putExtra(
- "cid",
- ((Comment) commentByMe
- .get(position - 1))
- .getUser().getId()
- + "");
- break;
- case 2:
- if (position > mentions.size() - 1)
- return;
- intent.putExtra(
- "cid",
- ((Status) mentions
- .get(position - 1))
- .getUser().getId()
- + "");
- break;
- }
- startActivity(intent);
- return;
- }
- if (which == 0) {
- switch (tabHost.getCurrentTab()) {
- case 0:
- if (position > commentToMe.size() - 1)
- return;
- new CommentMentionDialog(InfoActivity.this,
- true, ((Comment) commentToMe
- .get(position - 1))
- .getStatus().getId(),
- ((Comment) commentToMe
- .get(position - 1)).getId()
- + "");
- break;
- case 1:
- if (position > commentByMe.size() - 1)
- return;
- new CommentMentionDialog(InfoActivity.this,
- true, ((Comment) commentByMe
- .get(position - 1))
- .getStatus().getId(),
- ((Comment) commentByMe
- .get(position - 1)).getId()
- + "");
- break;
- case 2:
- if (position > mentions.size() - 1)
- return;
- new CommentMentionDialog(
- InfoActivity.this,
- true,
- (((Status) mentions
- .get(position - 1)).getId()),
- null);
- break;
- }
- return;
- }
- Intent intent = new Intent(InfoActivity.this,
- ViewActivity.class);
- switch (tabHost.getCurrentTab()) {
- case 0:
- if (position > commentToMe.size() - 1)
- return;
- intent.putExtra("cid", ((Comment) commentToMe
- .get(position - 1)).getStatus().getId());
- break;
- case 1:
- if (position > commentByMe.size() - 1)
- return;
- intent.putExtra("cid", ((Comment) commentByMe
- .get(position - 1)).getStatus().getId());
- break;
- case 2:
- if (position > mentions.size() - 1)
- return;
- intent.putExtra("cid", ((Status) mentions
- .get(position - 1)).getId());
- break;
- default:
- return;
- }
- InfoActivity.this.startActivity(intent);
- }
- }).show();
- }
- };
- }
|