package net.oschina.app.ui; import greendroid.widget.MyQuickAction; import greendroid.widget.QuickActionGrid; import greendroid.widget.QuickActionWidget; import greendroid.widget.QuickActionWidget.OnQuickActionClickListener; import java.util.ArrayList; import java.util.Date; import java.util.List; import net.oschina.app.AppConfig; import net.oschina.app.AppContext; import net.oschina.app.AppException; import net.oschina.app.R; import net.oschina.app.adapter.ListViewActiveAdapter; import net.oschina.app.adapter.ListViewBlogAdapter; import net.oschina.app.adapter.ListViewMessageAdapter; import net.oschina.app.adapter.ListViewNewsAdapter; import net.oschina.app.adapter.ListViewQuestionAdapter; import net.oschina.app.adapter.ListViewTweetAdapter; import net.oschina.app.bean.Active; import net.oschina.app.bean.ActiveList; import net.oschina.app.bean.Blog; import net.oschina.app.bean.BlogList; import net.oschina.app.bean.MessageList; import net.oschina.app.bean.Messages; import net.oschina.app.bean.News; import net.oschina.app.bean.NewsList; import net.oschina.app.bean.Notice; import net.oschina.app.bean.Post; import net.oschina.app.bean.PostList; import net.oschina.app.bean.Result; import net.oschina.app.bean.Tweet; import net.oschina.app.bean.TweetList; import net.oschina.app.common.StringUtils; import net.oschina.app.common.UIHelper; import net.oschina.app.common.UpdateManager; import net.oschina.app.widget.BadgeView; import net.oschina.app.widget.NewDataToast; import net.oschina.app.widget.PullToRefreshListView; import net.oschina.app.widget.ScrollLayout; import android.annotation.SuppressLint; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.graphics.Color; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.RadioButton; import android.widget.TextView; /** * 应用程序首页 * * @author liux (http://my.oschina.net/liux) * @version 1.0 * @created 2012-3-21 */ @SuppressLint("HandlerLeak") public class Main extends BaseActivity { public static final int QUICKACTION_LOGIN_OR_LOGOUT = 0; public static final int QUICKACTION_USERINFO = 1; public static final int QUICKACTION_SOFTWARE = 2; public static final int QUICKACTION_SEARCH = 3; public static final int QUICKACTION_SETTING = 4; public static final int QUICKACTION_EXIT = 5; private ScrollLayout mScrollLayout; private RadioButton[] mButtons; private String[] mHeadTitles; private int mViewCount; private int mCurSel; private ImageView mHeadLogo; private TextView mHeadTitle; private ProgressBar mHeadProgress; private ImageButton mHead_search; private ImageButton mHeadPub_post; private ImageButton mHeadPub_tweet; private int curNewsCatalog = NewsList.CATALOG_ALL; private int curQuestionCatalog = PostList.CATALOG_ASK; private int curTweetCatalog = TweetList.CATALOG_LASTEST; private int curActiveCatalog = ActiveList.CATALOG_LASTEST; private PullToRefreshListView newsListView; private PullToRefreshListView lvBlog; private PullToRefreshListView lvQuestion; private PullToRefreshListView lvTweet;//热门动弹 private PullToRefreshListView lvActive; private PullToRefreshListView lvMsg; private ListViewNewsAdapter newsListViewAdapter; private ListViewBlogAdapter lvBlogAdapter; private ListViewQuestionAdapter lvQuestionAdapter; private ListViewTweetAdapter lvTweetAdapter; private ListViewActiveAdapter lvActiveAdapter; private ListViewMessageAdapter lvMsgAdapter; private List<News> newsListViewData = new ArrayList<News>(); private List<Blog> lvBlogData = new ArrayList<Blog>(); private List<Post> lvQuestionData = new ArrayList<Post>(); private List<Tweet> lvTweetData = new ArrayList<Tweet>(); private List<Active> lvActiveData = new ArrayList<Active>(); private List<Messages> lvMsgData = new ArrayList<Messages>(); private Handler newsListViewHandler; private Handler lvBlogHandler; private Handler lvQuestionHandler; private Handler lvTweetHandler; private Handler lvActiveHandler; private Handler lvMsgHandler; private int newsListViewSumData; private int lvBlogSumData; private int lvQuestionSumData; private int lvTweetSumData; private int lvActiveSumData; private int lvMsgSumData; private RadioButton fbNews; private RadioButton fbQuestion; private RadioButton fbTweet; private RadioButton fbactive; private ImageView fbSetting; private Button framebtn_News_lastest; private Button framebtn_News_blog; private Button framebtn_News_recommend; private Button framebtn_Question_ask; private Button framebtn_Question_share; private Button framebtn_Question_other; private Button framebtn_Question_job; private Button framebtn_Question_site; private Button framebtn_Tweet_lastest; private Button framebtn_Tweet_hot; private Button framebtn_Tweet_my; private Button framebtn_Active_lastest; private Button framebtn_Active_atme; private Button framebtn_Active_comment; private Button framebtn_Active_myself; private Button framebtn_Active_message; private View newsListView_footer; private View lvBlog_footer; private View lvQuestion_footer; private View lvTweet_footer; private View lvActive_footer; private View lvMsg_footer; private TextView newsListView_foot_more; private TextView lvBlog_foot_more; private TextView lvQuestion_foot_more; private TextView lvTweet_foot_more; private TextView lvActive_foot_more; private TextView lvMsg_foot_more; private ProgressBar newsListView_foot_progress; private ProgressBar lvBlog_foot_progress; private ProgressBar lvQuestion_foot_progress; private ProgressBar lvTweet_foot_progress; private ProgressBar lvActive_foot_progress; private ProgressBar lvMsg_foot_progress; public static BadgeView bv_active; public static BadgeView bv_message; public static BadgeView bv_atme; public static BadgeView bv_review; private QuickActionWidget mGrid;// 快捷栏控件 private boolean isClearNotice = false; private int curClearNoticeType = 0; private TweetReceiver tweetReceiver;// 动弹发布接收器 private AppContext appContext;// 全局Context @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // 注册广播接收器 tweetReceiver = new TweetReceiver(); IntentFilter filter = new IntentFilter(); filter.addAction("net.oschina.app.action.APP_TWEETPUB"); registerReceiver(tweetReceiver, filter); appContext = (AppContext) getApplication(); // 网络连接判断 if (!appContext.isNetworkConnected()) UIHelper.ToastMessage(this, R.string.network_not_connected); // 初始化登录 appContext.initLoginInfo(); this.initHeadView(); this.initFootBar(); this.initPageScroll(); this.initFrameButton(); this.initBadgeView(); this.initQuickActionGrid(); this.initListViewUI();// 初始化UI // 检查新版本 if (appContext.isCheckUp()) { UpdateManager.getUpdateManager().checkAppUpdate(this, false); } // 启动轮询通知信息 this.foreachUserNotice(); } @Override protected void onResume() { super.onResume(); if (mViewCount == 0) mViewCount = 4; if (mCurSel == 0 && !fbNews.isChecked()) { fbNews.setChecked(true); fbQuestion.setChecked(false); fbTweet.setChecked(false); fbactive.setChecked(false); } // 读取左右滑动配置 mScrollLayout.setIsScroll(appContext.isScroll()); } @Override protected void onDestroy() { super.onDestroy(); unregisterReceiver(tweetReceiver); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intent.getBooleanExtra("LOGIN", false)) { // 加载动弹、动态及留言(当前动弹的catalog大于0表示用户的uid) if (lvTweetData.isEmpty() && curTweetCatalog > 0 && mCurSel == 2) { this.loadLvTweetData(curTweetCatalog, 0, lvTweetHandler, UIHelper.LISTVIEW_ACTION_INIT); } else if (mCurSel == 3) { if (lvActiveData.isEmpty()) { this.loadLvActiveData(curActiveCatalog, 0, lvActiveHandler, UIHelper.LISTVIEW_ACTION_INIT); } if (lvMsgData.isEmpty()) { this.loadLvMsgData(0, lvMsgHandler, UIHelper.LISTVIEW_ACTION_INIT); } } } else if (intent.getBooleanExtra("NOTICE", false)) { // 查看最新信息 mScrollLayout.scrollToScreen(3); } } public class TweetReceiver extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { int what = intent.getIntExtra("MSG_WHAT", 0); if (what == 1) { Result res = (Result) intent.getSerializableExtra("RESULT"); UIHelper.ToastMessage(context, res.getErrorMessage(), 1000); if (res.OK()) { // 发送通知广播 if (res.getNotice() != null) { UIHelper.sendBroadCast(context, res.getNotice()); } // 发完动弹后-刷新最新动弹、我的动弹&最新动态(当前界面必须是动弹|动态) if (curTweetCatalog >= 0 && mCurSel == 2) { loadLvTweetData(curTweetCatalog, 0, lvTweetHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } else if (curActiveCatalog == ActiveList.CATALOG_LASTEST && mCurSel == 3) { loadLvActiveData(curActiveCatalog, 0, lvActiveHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } } } else { final Tweet tweet = (Tweet) intent .getSerializableExtra("TWEET"); final Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1) { Result res = (Result) msg.obj; UIHelper.ToastMessage(context, res.getErrorMessage(), 1000); if (res.OK()) { // 发送通知广播 if (res.getNotice() != null) { UIHelper.sendBroadCast(context, res.getNotice()); } // 发完动弹后-刷新最新、我的动弹&最新动态 if (curTweetCatalog >= 0 && mCurSel == 2) { loadLvTweetData(curTweetCatalog, 0, lvTweetHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } else if (curActiveCatalog == ActiveList.CATALOG_LASTEST && mCurSel == 3) { loadLvActiveData(curActiveCatalog, 0, lvActiveHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } if (TweetPub.mContext != null) { // 清除动弹保存的临时编辑内容 appContext.removeProperty( AppConfig.TEMP_TWEET, AppConfig.TEMP_TWEET_IMAGE); ((Activity) TweetPub.mContext).finish(); } } } else { ((AppException) msg.obj).makeToast(context); if (TweetPub.mContext != null && TweetPub.mMessage != null) TweetPub.mMessage.setVisibility(View.GONE); } } }; Thread thread = new Thread() { public void run() { Message msg = new Message(); try { Result res = appContext.pubTweet(tweet); msg.what = 1; msg.obj = res; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } handler.sendMessage(msg); } }; if (TweetPub.mContext != null) UIHelper.showResendTweetDialog(TweetPub.mContext, thread); else UIHelper.showResendTweetDialog(context, thread); } } } /** * 初始化快捷栏 */ private void initQuickActionGrid() { mGrid = new QuickActionGrid(this); mGrid.addQuickAction(new MyQuickAction(this, R.drawable.ic_menu_login, R.string.main_menu_login)); mGrid.addQuickAction(new MyQuickAction(this, R.drawable.ic_menu_myinfo, R.string.main_menu_myinfo)); mGrid.addQuickAction(new MyQuickAction(this, R.drawable.ic_menu_software, R.string.main_menu_software)); mGrid.addQuickAction(new MyQuickAction(this, R.drawable.ic_menu_search, R.string.main_menu_search)); mGrid.addQuickAction(new MyQuickAction(this, R.drawable.ic_menu_setting, R.string.main_menu_setting)); mGrid.addQuickAction(new MyQuickAction(this, R.drawable.ic_menu_exit, R.string.main_menu_exit)); mGrid.setOnQuickActionClickListener(mActionListener); } /** * 快捷栏item点击事件 */ private OnQuickActionClickListener mActionListener = new OnQuickActionClickListener() { public void onQuickActionClicked(QuickActionWidget widget, int position) { switch (position) { case QUICKACTION_LOGIN_OR_LOGOUT:// 用户登录-注销 UIHelper.loginOrLogout(Main.this); break; case QUICKACTION_USERINFO:// 我的资料 UIHelper.showUserInfo(Main.this); break; case QUICKACTION_SOFTWARE:// 开源软件 UIHelper.showSoftware(Main.this); break; case QUICKACTION_SEARCH:// 搜索 UIHelper.showSearch(Main.this); break; case QUICKACTION_SETTING:// 设置 UIHelper.showSetting(Main.this); break; case QUICKACTION_EXIT:// 退出 UIHelper.Exit(Main.this); break; } } }; /** * 初始化所有ListView */ private void initListViewUI() { // 初始化listview控件 initNewsListViewUI();// 初始化新闻列表 initBlogListView(); initQuestionListView(); initTweetListView(); initActiveListView(); initMsgListView(); // 加载listview数据 getListViewData(); } /** * 初始化所有ListView数据 */ private void getListViewData() { // 初始化Handler newsListViewHandler = this.getDealListDataHandler(newsListView,// ListView newsListViewAdapter, // adp newsListView_foot_more,// 底部按钮 newsListView_foot_progress, // 底部滚动条 AppContext.PAGE_SIZE// 分页条数 ); lvBlogHandler = this.getDealListDataHandler(lvBlog, lvBlogAdapter, lvBlog_foot_more, lvBlog_foot_progress, AppContext.PAGE_SIZE); lvQuestionHandler = this.getDealListDataHandler(lvQuestion, lvQuestionAdapter, lvQuestion_foot_more, lvQuestion_foot_progress, AppContext.PAGE_SIZE); lvTweetHandler = this.getDealListDataHandler(lvTweet, lvTweetAdapter, lvTweet_foot_more, lvTweet_foot_progress, AppContext.PAGE_SIZE); lvActiveHandler = this.getDealListDataHandler(lvActive, lvActiveAdapter, lvActive_foot_more, lvActive_foot_progress, AppContext.PAGE_SIZE); lvMsgHandler = this.getDealListDataHandler(lvMsg, lvMsgAdapter, lvMsg_foot_more, lvMsg_foot_progress, AppContext.PAGE_SIZE); // 加载资讯数据 if (newsListViewData.isEmpty()) { // 加载咨询列表 getNewsListData(// curNewsCatalog, // 当前咨询的类别 0, // 页码 newsListViewHandler,// handler UIHelper.LISTVIEW_ACTION_INIT// 动作:初始化 ); } } /** * 初始化新闻列表 */ private void initNewsListViewUI() { newsListViewAdapter = new ListViewNewsAdapter(this, newsListViewData, R.layout.news_listitem); newsListView_footer = getLayoutInflater().inflate( R.layout.listview_footer, null); newsListView_foot_more = (TextView) newsListView_footer .findViewById(R.id.listview_foot_more); newsListView_foot_progress = (ProgressBar) newsListView_footer .findViewById(R.id.listview_foot_progress); newsListView = (PullToRefreshListView) findViewById(R.id.frame_listview_news); newsListView.addFooterView(newsListView_footer);// 添加底部视图 必须在setAdapter前 newsListView.setAdapter(newsListViewAdapter); // 点击事件 newsListView .setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 点击头部、底部栏无效 if (position == 0 || view == newsListView_footer) return; News news = null; // 判断是否是TextView if (view instanceof TextView) { news = (News) view.getTag(); } else { TextView tv = (TextView) view .findViewById(R.id.news_listitem_title); news = (News) tv.getTag(); } if (news == null) return; // 跳转到新闻详情 UIHelper.showNewsRedirect(view.getContext(), news); } }); // 滚动ListView事件 newsListView.setOnScrollListener(new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { newsListView.onScrollStateChanged(view, scrollState); // 数据为空--不用继续下面代码了 if (newsListViewData.isEmpty()) return; // 判断是否滚动到底部 boolean scrollEnd = false; try { if (view.getPositionForView(newsListView_footer) == view .getLastVisiblePosition()) scrollEnd = true; } catch (Exception e) { scrollEnd = false; } int lvDataState = StringUtils.toInt(newsListView.getTag()); if (scrollEnd && lvDataState == UIHelper.LISTVIEW_DATA_MORE) { newsListView.setTag(UIHelper.LISTVIEW_DATA_LOADING); newsListView_foot_more.setText(AppContext.PAGE_SIZE + "条数据 " + getString(R.string.load_ing)); newsListView_foot_progress.setVisibility(View.VISIBLE); // 当前pageIndex int pageIndex = newsListViewSumData / AppContext.PAGE_SIZE; getNewsListData(curNewsCatalog, pageIndex, newsListViewHandler, UIHelper.LISTVIEW_ACTION_SCROLL); } } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { newsListView.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); } }); // 刷新ListView操作 newsListView .setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { public void onRefresh() { getNewsListData(curNewsCatalog, 0, newsListViewHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } }); } /** * 初始化博客列表 */ private void initBlogListView() { lvBlogAdapter = new ListViewBlogAdapter(this, BlogList.CATALOG_LATEST, lvBlogData, R.layout.blog_listitem); lvBlog_footer = getLayoutInflater().inflate(R.layout.listview_footer, null); lvBlog_foot_more = (TextView) lvBlog_footer .findViewById(R.id.listview_foot_more); lvBlog_foot_progress = (ProgressBar) lvBlog_footer .findViewById(R.id.listview_foot_progress); lvBlog = (PullToRefreshListView) findViewById(R.id.frame_listview_blog); lvBlog.addFooterView(lvBlog_footer);// 添加底部视图 必须在setAdapter前 lvBlog.setAdapter(lvBlogAdapter); lvBlog.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 点击头部、底部栏无效 if (position == 0 || view == lvBlog_footer) return; Blog blog = null; // 判断是否是TextView if (view instanceof TextView) { blog = (Blog) view.getTag(); } else { TextView tv = (TextView) view .findViewById(R.id.blog_listitem_title); blog = (Blog) tv.getTag(); } if (blog == null) return; // 跳转到博客详情 UIHelper.showUrlRedirect(view.getContext(), blog.getUrl()); } }); lvBlog.setOnScrollListener(new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { lvBlog.onScrollStateChanged(view, scrollState); // 数据为空--不用继续下面代码了 if (lvBlogData.isEmpty()) return; // 判断是否滚动到底部 boolean scrollEnd = false; try { if (view.getPositionForView(lvBlog_footer) == view .getLastVisiblePosition()) scrollEnd = true; } catch (Exception e) { scrollEnd = false; } int lvDataState = StringUtils.toInt(lvBlog.getTag()); if (scrollEnd && lvDataState == UIHelper.LISTVIEW_DATA_MORE) { lvBlog.setTag(UIHelper.LISTVIEW_DATA_LOADING); lvBlog_foot_more.setText(R.string.load_ing); lvBlog_foot_progress.setVisibility(View.VISIBLE); // 当前pageIndex int pageIndex = lvBlogSumData / AppContext.PAGE_SIZE; loadLvBlogData(curNewsCatalog, pageIndex, lvBlogHandler, UIHelper.LISTVIEW_ACTION_SCROLL); } } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { lvBlog.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); } }); lvBlog.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { public void onRefresh() { loadLvBlogData(curNewsCatalog, 0, lvBlogHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } }); } /** * 初始化帖子列表 */ private void initQuestionListView() { lvQuestionAdapter = new ListViewQuestionAdapter(this, lvQuestionData, R.layout.question_listitem); lvQuestion_footer = getLayoutInflater().inflate( R.layout.listview_footer, null); lvQuestion_foot_more = (TextView) lvQuestion_footer .findViewById(R.id.listview_foot_more); lvQuestion_foot_progress = (ProgressBar) lvQuestion_footer .findViewById(R.id.listview_foot_progress); lvQuestion = (PullToRefreshListView) findViewById(R.id.frame_listview_question); lvQuestion.addFooterView(lvQuestion_footer);// 添加底部视图 必须在setAdapter前 lvQuestion.setAdapter(lvQuestionAdapter); lvQuestion .setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 点击头部、底部栏无效 if (position == 0 || view == lvQuestion_footer) return; Post post = null; // 判断是否是TextView if (view instanceof TextView) { post = (Post) view.getTag(); } else { TextView tv = (TextView) view .findViewById(R.id.question_listitem_title); post = (Post) tv.getTag(); } if (post == null) return; // 跳转到问答详情 UIHelper.showQuestionDetail(view.getContext(), post.getId()); } }); lvQuestion.setOnScrollListener(new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { lvQuestion.onScrollStateChanged(view, scrollState); // 数据为空--不用继续下面代码了 if (lvQuestionData.isEmpty()) return; // 判断是否滚动到底部 boolean scrollEnd = false; try { if (view.getPositionForView(lvQuestion_footer) == view .getLastVisiblePosition()) scrollEnd = true; } catch (Exception e) { scrollEnd = false; } int lvDataState = StringUtils.toInt(lvQuestion.getTag()); if (scrollEnd && lvDataState == UIHelper.LISTVIEW_DATA_MORE) { lvQuestion.setTag(UIHelper.LISTVIEW_DATA_LOADING); lvQuestion_foot_more.setText(R.string.load_ing); lvQuestion_foot_progress.setVisibility(View.VISIBLE); // 当前pageIndex int pageIndex = lvQuestionSumData / AppContext.PAGE_SIZE; loadLvQuestionData(curQuestionCatalog, pageIndex, lvQuestionHandler, UIHelper.LISTVIEW_ACTION_SCROLL); } } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { lvQuestion.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); } }); lvQuestion .setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { public void onRefresh() { loadLvQuestionData(curQuestionCatalog, 0, lvQuestionHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } }); } /** * 初始化动弹列表 */ private void initTweetListView() { lvTweetAdapter = new ListViewTweetAdapter(this, lvTweetData, R.layout.tweet_listitem); lvTweet_footer = getLayoutInflater().inflate(R.layout.listview_footer, null); lvTweet_foot_more = (TextView) lvTweet_footer .findViewById(R.id.listview_foot_more); lvTweet_foot_progress = (ProgressBar) lvTweet_footer .findViewById(R.id.listview_foot_progress); lvTweet = (PullToRefreshListView) findViewById(R.id.frame_listview_tweet); lvTweet.addFooterView(lvTweet_footer);// 添加底部视图 必须在setAdapter前 lvTweet.setAdapter(lvTweetAdapter); lvTweet.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 点击头部、底部栏无效 if (position == 0 || view == lvTweet_footer) return; Tweet tweet = null; // 判断是否是TextView if (view instanceof TextView) { tweet = (Tweet) view.getTag(); } else { TextView tv = (TextView) view .findViewById(R.id.tweet_listitem_username); tweet = (Tweet) tv.getTag(); } if (tweet == null) return; // 跳转到动弹详情&评论页面 UIHelper.showTweetDetail(view.getContext(), tweet.getId()); } }); lvTweet.setOnScrollListener(new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { lvTweet.onScrollStateChanged(view, scrollState); // 数据为空--不用继续下面代码了 if (lvTweetData.isEmpty()) return; // 判断是否滚动到底部 boolean scrollEnd = false; try { if (view.getPositionForView(lvTweet_footer) == view .getLastVisiblePosition()) scrollEnd = true; } catch (Exception e) { scrollEnd = false; } int lvDataState = StringUtils.toInt(lvTweet.getTag()); if (scrollEnd && lvDataState == UIHelper.LISTVIEW_DATA_MORE) { lvTweet.setTag(UIHelper.LISTVIEW_DATA_LOADING); lvTweet_foot_more.setText(R.string.load_ing); lvTweet_foot_progress.setVisibility(View.VISIBLE); // 当前pageIndex int pageIndex = lvTweetSumData / AppContext.PAGE_SIZE; loadLvTweetData(curTweetCatalog, pageIndex, lvTweetHandler, UIHelper.LISTVIEW_ACTION_SCROLL); } } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { lvTweet.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); } }); lvTweet.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { // 点击头部、底部栏无效 if (position == 0 || view == lvTweet_footer) return false; Tweet _tweet = null; // 判断是否是TextView if (view instanceof TextView) { _tweet = (Tweet) view.getTag(); } else { TextView tv = (TextView) view .findViewById(R.id.tweet_listitem_username); _tweet = (Tweet) tv.getTag(); } if (_tweet == null) return false; final Tweet tweet = _tweet; // 删除操作 // if(appContext.getLoginUid() == tweet.getAuthorId()) { final Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1) { Result res = (Result) msg.obj; if (res.OK()) { lvTweetData.remove(tweet); lvTweetAdapter.notifyDataSetChanged(); } UIHelper.ToastMessage(Main.this, res.getErrorMessage()); } else { ((AppException) msg.obj).makeToast(Main.this); } } }; Thread thread = new Thread() { public void run() { Message msg = new Message(); try { Result res = appContext.delTweet( appContext.getLoginUid(), tweet.getId()); msg.what = 1; msg.obj = res; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } handler.sendMessage(msg); } }; UIHelper.showTweetOptionDialog(Main.this, thread); // } else { // UIHelper.showTweetOptionDialog(Main.this, null); // } return true; } }); lvTweet.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { public void onRefresh() { loadLvTweetData(curTweetCatalog, 0, lvTweetHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } }); } /** * 初始化动态列表 */ private void initActiveListView() { lvActiveAdapter = new ListViewActiveAdapter(this, lvActiveData, R.layout.active_listitem); lvActive_footer = getLayoutInflater().inflate(R.layout.listview_footer, null); lvActive_foot_more = (TextView) lvActive_footer .findViewById(R.id.listview_foot_more); lvActive_foot_progress = (ProgressBar) lvActive_footer .findViewById(R.id.listview_foot_progress); lvActive = (PullToRefreshListView) findViewById(R.id.frame_listview_active); lvActive.addFooterView(lvActive_footer);// 添加底部视图 必须在setAdapter前 lvActive.setAdapter(lvActiveAdapter); lvActive.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 点击头部、底部栏无效 if (position == 0 || view == lvActive_footer) return; Active active = null; // 判断是否是TextView if (view instanceof TextView) { active = (Active) view.getTag(); } else { TextView tv = (TextView) view .findViewById(R.id.active_listitem_username); active = (Active) tv.getTag(); } if (active == null) return; // 跳转 UIHelper.showActiveRedirect(view.getContext(), active); } }); lvActive.setOnScrollListener(new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { lvActive.onScrollStateChanged(view, scrollState); // 数据为空--不用继续下面代码了 if (lvActiveData.isEmpty()) return; // 判断是否滚动到底部 boolean scrollEnd = false; try { if (view.getPositionForView(lvActive_footer) == view .getLastVisiblePosition()) scrollEnd = true; } catch (Exception e) { scrollEnd = false; } int lvDataState = StringUtils.toInt(lvActive.getTag()); if (scrollEnd && lvDataState == UIHelper.LISTVIEW_DATA_MORE) { lvActive.setTag(UIHelper.LISTVIEW_DATA_LOADING); lvActive_foot_more.setText(R.string.load_ing); lvActive_foot_progress.setVisibility(View.VISIBLE); // 当前pageIndex int pageIndex = lvActiveSumData / AppContext.PAGE_SIZE; loadLvActiveData(curActiveCatalog, pageIndex, lvActiveHandler, UIHelper.LISTVIEW_ACTION_SCROLL); } } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { lvActive.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); } }); lvActive.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { public void onRefresh() { // 处理通知信息 if (curActiveCatalog == ActiveList.CATALOG_ATME && bv_atme.isShown()) { isClearNotice = true; curClearNoticeType = Notice.TYPE_ATME; } else if (curActiveCatalog == ActiveList.CATALOG_COMMENT && bv_review.isShown()) { isClearNotice = true; curClearNoticeType = Notice.TYPE_COMMENT; } // 刷新数据 loadLvActiveData(curActiveCatalog, 0, lvActiveHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } }); } /** * 初始化留言列表 */ private void initMsgListView() { lvMsgAdapter = new ListViewMessageAdapter(this, lvMsgData, R.layout.message_listitem); lvMsg_footer = getLayoutInflater().inflate(R.layout.listview_footer, null); lvMsg_foot_more = (TextView) lvMsg_footer .findViewById(R.id.listview_foot_more); lvMsg_foot_progress = (ProgressBar) lvMsg_footer .findViewById(R.id.listview_foot_progress); lvMsg = (PullToRefreshListView) findViewById(R.id.frame_listview_message); lvMsg.addFooterView(lvMsg_footer);// 添加底部视图 必须在setAdapter前 lvMsg.setAdapter(lvMsgAdapter); lvMsg.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 点击头部、底部栏无效 if (position == 0 || view == lvMsg_footer) return; Messages msg = null; // 判断是否是TextView if (view instanceof TextView) { msg = (Messages) view.getTag(); } else { TextView tv = (TextView) view .findViewById(R.id.message_listitem_username); msg = (Messages) tv.getTag(); } if (msg == null) return; // 跳转到留言详情 UIHelper.showMessageDetail(view.getContext(), msg.getFriendId(), msg.getFriendName()); } }); lvMsg.setOnScrollListener(new AbsListView.OnScrollListener() { public void onScrollStateChanged(AbsListView view, int scrollState) { lvMsg.onScrollStateChanged(view, scrollState); // 数据为空--不用继续下面代码了 if (lvMsgData.isEmpty()) return; // 判断是否滚动到底部 boolean scrollEnd = false; try { if (view.getPositionForView(lvMsg_footer) == view .getLastVisiblePosition()) scrollEnd = true; } catch (Exception e) { scrollEnd = false; } int lvDataState = StringUtils.toInt(lvMsg.getTag()); if (scrollEnd && lvDataState == UIHelper.LISTVIEW_DATA_MORE) { lvMsg.setTag(UIHelper.LISTVIEW_DATA_LOADING); lvMsg_foot_more.setText(R.string.load_ing); lvMsg_foot_progress.setVisibility(View.VISIBLE); // 当前pageIndex int pageIndex = lvMsgSumData / AppContext.PAGE_SIZE; loadLvMsgData(pageIndex, lvMsgHandler, UIHelper.LISTVIEW_ACTION_SCROLL); } } public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { lvMsg.onScroll(view, firstVisibleItem, visibleItemCount, totalItemCount); } }); lvMsg.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) { // 点击头部、底部栏无效 if (position == 0 || view == lvMsg_footer) return false; Messages _msg = null; // 判断是否是TextView if (view instanceof TextView) { _msg = (Messages) view.getTag(); } else { TextView tv = (TextView) view .findViewById(R.id.message_listitem_username); _msg = (Messages) tv.getTag(); } if (_msg == null) return false; final Messages message = _msg; // 选择操作 final Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1) { Result res = (Result) msg.obj; if (res.OK()) { lvMsgData.remove(message); lvMsgAdapter.notifyDataSetChanged(); } UIHelper.ToastMessage(Main.this, res.getErrorMessage()); } else { ((AppException) msg.obj).makeToast(Main.this); } } }; Thread thread = new Thread() { public void run() { Message msg = new Message(); try { Result res = appContext.delMessage( appContext.getLoginUid(), message.getFriendId()); msg.what = 1; msg.obj = res; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } handler.sendMessage(msg); } }; UIHelper.showMessageListOptionDialog(Main.this, message, thread); return true; } }); lvMsg.setOnRefreshListener(new PullToRefreshListView.OnRefreshListener() { public void onRefresh() { // 清除通知信息 if (bv_message.isShown()) { isClearNotice = true; curClearNoticeType = Notice.TYPE_MESSAGE; } // 刷新数据 loadLvMsgData(0, lvMsgHandler, UIHelper.LISTVIEW_ACTION_REFRESH); } }); } /** * 初始化头部视图 */ private void initHeadView() { mHeadLogo = (ImageView) findViewById(R.id.main_head_logo); mHeadTitle = (TextView) findViewById(R.id.main_head_title); mHeadProgress = (ProgressBar) findViewById(R.id.main_head_progress); mHead_search = (ImageButton) findViewById(R.id.main_head_search); mHeadPub_post = (ImageButton) findViewById(R.id.main_head_pub_post); mHeadPub_tweet = (ImageButton) findViewById(R.id.main_head_pub_tweet); mHead_search.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { UIHelper.showSearch(v.getContext()); } }); mHeadPub_post.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { UIHelper.showQuestionPub(v.getContext()); } }); mHeadPub_tweet.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { UIHelper.showTweetPub(Main.this); } }); } /** * 初始化底部栏 */ private void initFootBar() { fbNews = (RadioButton) findViewById(R.id.main_footbar_news); fbQuestion = (RadioButton) findViewById(R.id.main_footbar_question); fbTweet = (RadioButton) findViewById(R.id.main_footbar_tweet); fbactive = (RadioButton) findViewById(R.id.main_footbar_active); fbSetting = (ImageView) findViewById(R.id.main_footbar_setting); fbSetting.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // 展示快捷栏&判断是否登录&是否加载文章图片 UIHelper.showSettingLoginOrLogout(Main.this, mGrid.getQuickAction(0)); mGrid.show(v); } }); } /** * 初始化通知信息标签控件 */ private void initBadgeView() { bv_active = new BadgeView(this, fbactive); bv_active.setBackgroundResource(R.drawable.widget_count_bg); bv_active.setIncludeFontPadding(false); bv_active.setGravity(Gravity.CENTER); bv_active.setTextSize(8f); bv_active.setTextColor(Color.WHITE); bv_atme = new BadgeView(this, framebtn_Active_atme); bv_atme.setBackgroundResource(R.drawable.widget_count_bg); bv_atme.setIncludeFontPadding(false); bv_atme.setGravity(Gravity.CENTER); bv_atme.setTextSize(8f); bv_atme.setTextColor(Color.WHITE); bv_review = new BadgeView(this, framebtn_Active_comment); bv_review.setBackgroundResource(R.drawable.widget_count_bg); bv_review.setIncludeFontPadding(false); bv_review.setGravity(Gravity.CENTER); bv_review.setTextSize(8f); bv_review.setTextColor(Color.WHITE); bv_message = new BadgeView(this, framebtn_Active_message); bv_message.setBackgroundResource(R.drawable.widget_count_bg); bv_message.setIncludeFontPadding(false); bv_message.setGravity(Gravity.CENTER); bv_message.setTextSize(8f); bv_message.setTextColor(Color.WHITE); } /** * 初始化水平滚动翻页 */ private void initPageScroll() { mScrollLayout = (ScrollLayout) findViewById(R.id.main_scrolllayout); LinearLayout linearLayout = (LinearLayout) findViewById(R.id.main_linearlayout_footer); mHeadTitles = getResources().getStringArray(R.array.head_titles); mViewCount = mScrollLayout.getChildCount(); mButtons = new RadioButton[mViewCount]; for (int i = 0; i < mViewCount; i++) { mButtons[i] = (RadioButton) linearLayout.getChildAt(i * 2); mButtons[i].setTag(i); mButtons[i].setChecked(false); mButtons[i].setOnClickListener(new View.OnClickListener() { public void onClick(View v) { int pos = (Integer) (v.getTag()); // 点击当前项刷新 if (mCurSel == pos) { switch (pos) { case 0:// 资讯+博客 if (newsListView.getVisibility() == View.VISIBLE) newsListView.clickRefresh(); else lvBlog.clickRefresh(); break; case 1:// 问答 lvQuestion.clickRefresh(); break; case 2:// 动弹 lvTweet.clickRefresh(); break; case 3:// 动态+留言 if (lvActive.getVisibility() == View.VISIBLE) lvActive.clickRefresh(); else lvMsg.clickRefresh(); break; } } mScrollLayout.snapToScreen(pos); } }); } // 设置第一显示屏 mCurSel = 0; mButtons[mCurSel].setChecked(true); mScrollLayout .SetOnViewChangeListener(new ScrollLayout.OnViewChangeListener() { public void OnViewChange(int viewIndex) { // 切换列表视图-如果列表数据为空:加载数据 switch (viewIndex) { case 0:// 资讯 if (newsListView.getVisibility() == View.VISIBLE) { if (newsListViewData.isEmpty()) { getNewsListData(curNewsCatalog, 0, newsListViewHandler, UIHelper.LISTVIEW_ACTION_INIT); } } else { if (lvBlogData.isEmpty()) { loadLvBlogData(curNewsCatalog, 0, lvBlogHandler, UIHelper.LISTVIEW_ACTION_INIT); } } break; case 1:// 问答 if (lvQuestionData.isEmpty()) { loadLvQuestionData(curQuestionCatalog, 0, lvQuestionHandler, UIHelper.LISTVIEW_ACTION_INIT); } break; case 2:// 动弹 if (lvTweetData.isEmpty()) { loadLvTweetData(curTweetCatalog, 0, lvTweetHandler, UIHelper.LISTVIEW_ACTION_INIT); } break; case 3:// 动态 // 判断登录 if (!appContext.isLogin()) { if (lvActive.getVisibility() == View.VISIBLE && lvActiveData.isEmpty()) { lvActive_foot_more .setText(R.string.load_empty); lvActive_foot_progress .setVisibility(View.GONE); } else if (lvMsg.getVisibility() == View.VISIBLE && lvMsgData.isEmpty()) { lvMsg_foot_more .setText(R.string.load_empty); lvMsg_foot_progress .setVisibility(View.GONE); } UIHelper.showLoginDialog(Main.this); break; } // 处理通知信息 if (bv_atme.isShown()) frameActiveBtnOnClick(framebtn_Active_atme, ActiveList.CATALOG_ATME, UIHelper.LISTVIEW_ACTION_REFRESH); else if (bv_review.isShown()) frameActiveBtnOnClick(framebtn_Active_comment, ActiveList.CATALOG_COMMENT, UIHelper.LISTVIEW_ACTION_REFRESH); else if (bv_message.isShown()) frameActiveBtnOnClick(framebtn_Active_message, 0, UIHelper.LISTVIEW_ACTION_REFRESH); else if (lvActive.getVisibility() == View.VISIBLE && lvActiveData.isEmpty()) loadLvActiveData(curActiveCatalog, 0, lvActiveHandler, UIHelper.LISTVIEW_ACTION_INIT); else if (lvMsg.getVisibility() == View.VISIBLE && lvMsgData.isEmpty()) loadLvMsgData(0, lvMsgHandler, UIHelper.LISTVIEW_ACTION_INIT); break; } setCurPoint(viewIndex); } }); } /** * 设置底部栏当前焦点 * * @param index */ private void setCurPoint(int index) { if (index < 0 || index > mViewCount - 1 || mCurSel == index) return; mButtons[mCurSel].setChecked(false); mButtons[index].setChecked(true); mHeadTitle.setText(mHeadTitles[index]); mCurSel = index; mHead_search.setVisibility(View.GONE); mHeadPub_post.setVisibility(View.GONE); mHeadPub_tweet.setVisibility(View.GONE); // 头部logo、发帖、发动弹按钮显示 if (index == 0) { mHeadLogo.setImageResource(R.drawable.frame_logo_news); mHead_search.setVisibility(View.VISIBLE); } else if (index == 1) { mHeadLogo.setImageResource(R.drawable.frame_logo_post); mHeadPub_post.setVisibility(View.VISIBLE); } else if (index == 2) { mHeadLogo.setImageResource(R.drawable.frame_logo_tweet); mHeadPub_tweet.setVisibility(View.VISIBLE); } else if (index == 3) { mHeadLogo.setImageResource(R.drawable.frame_logo_active); mHeadPub_tweet.setVisibility(View.VISIBLE); } } /** * 初始化各个主页的按钮(资讯、问答、动弹、动态、留言) */ private void initFrameButton() { // 初始化按钮控件 framebtn_News_lastest = (Button) findViewById(R.id.frame_btn_news_lastest); framebtn_News_blog = (Button) findViewById(R.id.frame_btn_news_blog); framebtn_News_recommend = (Button) findViewById(R.id.frame_btn_news_recommend); framebtn_Question_ask = (Button) findViewById(R.id.frame_btn_question_ask); framebtn_Question_share = (Button) findViewById(R.id.frame_btn_question_share); framebtn_Question_other = (Button) findViewById(R.id.frame_btn_question_other); framebtn_Question_job = (Button) findViewById(R.id.frame_btn_question_job); framebtn_Question_site = (Button) findViewById(R.id.frame_btn_question_site); framebtn_Tweet_lastest = (Button) findViewById(R.id.frame_btn_tweet_lastest); framebtn_Tweet_hot = (Button) findViewById(R.id.frame_btn_tweet_hot); framebtn_Tweet_my = (Button) findViewById(R.id.frame_btn_tweet_my); framebtn_Active_lastest = (Button) findViewById(R.id.frame_btn_active_lastest); framebtn_Active_atme = (Button) findViewById(R.id.frame_btn_active_atme); framebtn_Active_comment = (Button) findViewById(R.id.frame_btn_active_comment); framebtn_Active_myself = (Button) findViewById(R.id.frame_btn_active_myself); framebtn_Active_message = (Button) findViewById(R.id.frame_btn_active_message); // 设置首选择项 framebtn_News_lastest.setEnabled(false); framebtn_Question_ask.setEnabled(false); framebtn_Tweet_lastest.setEnabled(false); framebtn_Active_lastest.setEnabled(false); // 资讯+博客 framebtn_News_lastest.setOnClickListener(frameNewsBtnClick( framebtn_News_lastest, NewsList.CATALOG_ALL)); framebtn_News_blog.setOnClickListener(frameNewsBtnClick( framebtn_News_blog, BlogList.CATALOG_LATEST)); framebtn_News_recommend.setOnClickListener(frameNewsBtnClick( framebtn_News_recommend, BlogList.CATALOG_RECOMMEND)); // 问答 framebtn_Question_ask.setOnClickListener(frameQuestionBtnClick( framebtn_Question_ask, PostList.CATALOG_ASK)); framebtn_Question_share.setOnClickListener(frameQuestionBtnClick( framebtn_Question_share, PostList.CATALOG_SHARE)); framebtn_Question_other.setOnClickListener(frameQuestionBtnClick( framebtn_Question_other, PostList.CATALOG_OTHER)); framebtn_Question_job.setOnClickListener(frameQuestionBtnClick( framebtn_Question_job, PostList.CATALOG_JOB)); framebtn_Question_site.setOnClickListener(frameQuestionBtnClick( framebtn_Question_site, PostList.CATALOG_SITE)); // 动弹 framebtn_Tweet_lastest.setOnClickListener(frameTweetBtnClick( framebtn_Tweet_lastest, TweetList.CATALOG_LASTEST)); framebtn_Tweet_hot.setOnClickListener(frameTweetBtnClick( framebtn_Tweet_hot, TweetList.CATALOG_HOT)); framebtn_Tweet_my.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // 判断登录 int uid = appContext.getLoginUid(); if (uid == 0) { UIHelper.showLoginDialog(Main.this); return; } framebtn_Tweet_lastest.setEnabled(true); framebtn_Tweet_hot.setEnabled(true); framebtn_Tweet_my.setEnabled(false); curTweetCatalog = uid; loadLvTweetData(curTweetCatalog, 0, lvTweetHandler, UIHelper.LISTVIEW_ACTION_CHANGE_CATALOG); } }); // 动态+留言 framebtn_Active_lastest.setOnClickListener(frameActiveBtnClick( framebtn_Active_lastest, ActiveList.CATALOG_LASTEST)); framebtn_Active_atme.setOnClickListener(frameActiveBtnClick( framebtn_Active_atme, ActiveList.CATALOG_ATME)); framebtn_Active_comment.setOnClickListener(frameActiveBtnClick( framebtn_Active_comment, ActiveList.CATALOG_COMMENT)); framebtn_Active_myself.setOnClickListener(frameActiveBtnClick( framebtn_Active_myself, ActiveList.CATALOG_MYSELF)); framebtn_Active_message.setOnClickListener(frameActiveBtnClick( framebtn_Active_message, 0)); // 特殊处理 framebtn_Active_atme.setText("@" + getString(R.string.frame_title_active_atme)); } private View.OnClickListener frameNewsBtnClick(final Button btn, final int catalog) { return new View.OnClickListener() { public void onClick(View v) { if (btn == framebtn_News_lastest) { framebtn_News_lastest.setEnabled(false); } else { framebtn_News_lastest.setEnabled(true); } if (btn == framebtn_News_blog) { framebtn_News_blog.setEnabled(false); } else { framebtn_News_blog.setEnabled(true); } if (btn == framebtn_News_recommend) { framebtn_News_recommend.setEnabled(false); } else { framebtn_News_recommend.setEnabled(true); } curNewsCatalog = catalog; // 非新闻列表 if (btn == framebtn_News_lastest) { newsListView.setVisibility(View.VISIBLE); lvBlog.setVisibility(View.GONE); getNewsListData(curNewsCatalog, 0, newsListViewHandler, UIHelper.LISTVIEW_ACTION_CHANGE_CATALOG); } else { newsListView.setVisibility(View.GONE); lvBlog.setVisibility(View.VISIBLE); loadLvBlogData(curNewsCatalog, 0, lvBlogHandler, UIHelper.LISTVIEW_ACTION_CHANGE_CATALOG); } } }; } private View.OnClickListener frameQuestionBtnClick(final Button btn, final int catalog) { return new View.OnClickListener() { public void onClick(View v) { if (btn == framebtn_Question_ask) framebtn_Question_ask.setEnabled(false); else framebtn_Question_ask.setEnabled(true); if (btn == framebtn_Question_share) framebtn_Question_share.setEnabled(false); else framebtn_Question_share.setEnabled(true); if (btn == framebtn_Question_other) framebtn_Question_other.setEnabled(false); else framebtn_Question_other.setEnabled(true); if (btn == framebtn_Question_job) framebtn_Question_job.setEnabled(false); else framebtn_Question_job.setEnabled(true); if (btn == framebtn_Question_site) framebtn_Question_site.setEnabled(false); else framebtn_Question_site.setEnabled(true); curQuestionCatalog = catalog; loadLvQuestionData(curQuestionCatalog, 0, lvQuestionHandler, UIHelper.LISTVIEW_ACTION_CHANGE_CATALOG); } }; } private View.OnClickListener frameTweetBtnClick(final Button btn, final int catalog) { return new View.OnClickListener() { public void onClick(View v) { if (btn == framebtn_Tweet_lastest) framebtn_Tweet_lastest.setEnabled(false); else framebtn_Tweet_lastest.setEnabled(true); if (btn == framebtn_Tweet_hot) framebtn_Tweet_hot.setEnabled(false); else framebtn_Tweet_hot.setEnabled(true); if (btn == framebtn_Tweet_my) framebtn_Tweet_my.setEnabled(false); else framebtn_Tweet_my.setEnabled(true); curTweetCatalog = catalog; loadLvTweetData(curTweetCatalog, 0, lvTweetHandler, UIHelper.LISTVIEW_ACTION_CHANGE_CATALOG); } }; } private View.OnClickListener frameActiveBtnClick(final Button btn, final int catalog) { return new View.OnClickListener() { public void onClick(View v) { // 判断登录 if (!appContext.isLogin()) { if (lvActive.getVisibility() == View.VISIBLE && lvActiveData.isEmpty()) { lvActive_foot_more.setText(R.string.load_empty); lvActive_foot_progress.setVisibility(View.GONE); } else if (lvMsg.getVisibility() == View.VISIBLE && lvMsgData.isEmpty()) { lvMsg_foot_more.setText(R.string.load_empty); lvMsg_foot_progress.setVisibility(View.GONE); } UIHelper.showLoginDialog(Main.this); return; } frameActiveBtnOnClick(btn, catalog, UIHelper.LISTVIEW_ACTION_CHANGE_CATALOG); } }; } private void frameActiveBtnOnClick(Button btn, int catalog, int action) { if (btn == framebtn_Active_lastest) framebtn_Active_lastest.setEnabled(false); else framebtn_Active_lastest.setEnabled(true); if (btn == framebtn_Active_atme) framebtn_Active_atme.setEnabled(false); else framebtn_Active_atme.setEnabled(true); if (btn == framebtn_Active_comment) framebtn_Active_comment.setEnabled(false); else framebtn_Active_comment.setEnabled(true); if (btn == framebtn_Active_myself) framebtn_Active_myself.setEnabled(false); else framebtn_Active_myself.setEnabled(true); if (btn == framebtn_Active_message) framebtn_Active_message.setEnabled(false); else framebtn_Active_message.setEnabled(true); // 是否处理通知信息 if (btn == framebtn_Active_atme && bv_atme.isShown()) { action = UIHelper.LISTVIEW_ACTION_REFRESH; this.isClearNotice = true; this.curClearNoticeType = Notice.TYPE_ATME; } else if (btn == framebtn_Active_comment && bv_review.isShown()) { action = UIHelper.LISTVIEW_ACTION_REFRESH; this.isClearNotice = true; this.curClearNoticeType = Notice.TYPE_COMMENT; } else if (btn == framebtn_Active_message && bv_message.isShown()) { action = UIHelper.LISTVIEW_ACTION_REFRESH; this.isClearNotice = true; this.curClearNoticeType = Notice.TYPE_MESSAGE; } // 非留言展示动态列表 if (btn != framebtn_Active_message) { lvActive.setVisibility(View.VISIBLE); lvMsg.setVisibility(View.GONE); curActiveCatalog = catalog; loadLvActiveData(curActiveCatalog, 0, lvActiveHandler, action); } else { lvActive.setVisibility(View.GONE); lvMsg.setVisibility(View.VISIBLE); loadLvMsgData(0, lvMsgHandler, action); } } /************************************ 列表数据的加载 ***************************************/ // 加载新闻列表数据 private void getNewsListData(final int catalog, // 类别 final int pageIndex,// 页码 final Handler handler,// handler final int action// 动作 ) { mHeadProgress.setVisibility(ProgressBar.VISIBLE); new Thread() { public void run() { Message msg = new Message(); boolean isRefresh = false; if (action == UIHelper.LISTVIEW_ACTION_REFRESH || action == UIHelper.LISTVIEW_ACTION_SCROLL) isRefresh = true; try { NewsList list = appContext.getNewsList(catalog, pageIndex, isRefresh);// 访问接口获取数据 msg.what = list.getPageSize(); msg.obj = list; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } msg.arg1 = action; msg.arg2 = UIHelper.LISTVIEW_DATATYPE_NEWS; if (curNewsCatalog == catalog) handler.sendMessage(msg);// 发送给Handler进行数据的处理 } }.start(); } // 加载博客数据 private void loadLvBlogData(final int catalog, final int pageIndex, final Handler handler, final int action) { mHeadProgress.setVisibility(ProgressBar.VISIBLE); new Thread() { public void run() { Message msg = new Message(); boolean isRefresh = false; if (action == UIHelper.LISTVIEW_ACTION_REFRESH || action == UIHelper.LISTVIEW_ACTION_SCROLL) isRefresh = true; String type = ""; switch (catalog) { case BlogList.CATALOG_LATEST: type = BlogList.TYPE_LATEST; break; case BlogList.CATALOG_RECOMMEND: type = BlogList.TYPE_RECOMMEND; break; } try { BlogList list = appContext.getBlogList(type, pageIndex, isRefresh); msg.what = list.getPageSize(); msg.obj = list; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } msg.arg1 = action; msg.arg2 = UIHelper.LISTVIEW_DATATYPE_BLOG; if (curNewsCatalog == catalog) handler.sendMessage(msg); } }.start(); } // 加载帖子数据 private void loadLvQuestionData(final int catalog, final int pageIndex, final Handler handler, final int action) { mHeadProgress.setVisibility(ProgressBar.VISIBLE); new Thread() { public void run() { Message msg = new Message(); boolean isRefresh = false; if (action == UIHelper.LISTVIEW_ACTION_REFRESH || action == UIHelper.LISTVIEW_ACTION_SCROLL) isRefresh = true; try { PostList list = appContext.getPostList(catalog, pageIndex, isRefresh); msg.what = list.getPageSize(); msg.obj = list; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } msg.arg1 = action; msg.arg2 = UIHelper.LISTVIEW_DATATYPE_POST; if (curQuestionCatalog == catalog) handler.sendMessage(msg); } }.start(); } // 加载动弹数据 private void loadLvTweetData(final int catalog, final int pageIndex, final Handler handler, final int action) { mHeadProgress.setVisibility(ProgressBar.VISIBLE); new Thread() { public void run() { Message msg = new Message(); boolean isRefresh = false; if (action == UIHelper.LISTVIEW_ACTION_REFRESH || action == UIHelper.LISTVIEW_ACTION_SCROLL) isRefresh = true; try { TweetList list = appContext.getTweetList(catalog, pageIndex, isRefresh); msg.what = list.getPageSize(); msg.obj = list; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } msg.arg1 = action; msg.arg2 = UIHelper.LISTVIEW_DATATYPE_TWEET; if (curTweetCatalog == catalog) handler.sendMessage(msg); } }.start(); } // 加载动态数据 private void loadLvActiveData(final int catalog, final int pageIndex, final Handler handler, final int action) { mHeadProgress.setVisibility(ProgressBar.VISIBLE); new Thread() { public void run() { Message msg = new Message(); boolean isRefresh = false; if (action == UIHelper.LISTVIEW_ACTION_REFRESH || action == UIHelper.LISTVIEW_ACTION_SCROLL) isRefresh = true; try { ActiveList list = appContext.getActiveList(catalog, pageIndex, isRefresh); msg.what = list.getPageSize(); msg.obj = list; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } msg.arg1 = action; msg.arg2 = UIHelper.LISTVIEW_DATATYPE_ACTIVE; if (curActiveCatalog == catalog) handler.sendMessage(msg); } }.start(); } // 加载留言数据 private void loadLvMsgData(final int pageIndex, final Handler handler, final int action) { mHeadProgress.setVisibility(ProgressBar.VISIBLE); new Thread() { public void run() { Message msg = new Message(); boolean isRefresh = false; if (action == UIHelper.LISTVIEW_ACTION_REFRESH || action == UIHelper.LISTVIEW_ACTION_SCROLL) isRefresh = true; try { MessageList list = appContext.getMessageList(pageIndex, isRefresh); msg.what = list.getPageSize(); msg.obj = list; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } msg.arg1 = action; msg.arg2 = UIHelper.LISTVIEW_DATATYPE_MESSAGE; handler.sendMessage(msg); } }.start(); } // 生成处理列表数据的Handler private Handler getDealListDataHandler(// final PullToRefreshListView mListView,// 列表对象 final BaseAdapter adp, // adp final TextView moreTextView,// final ProgressBar progress, // final int pageSize// ) { return new Handler() { @SuppressWarnings("deprecation") public void handleMessage(Message msg) { // 正常的对ListView数据处理 if (msg.what >= 0) { Log.i("andli", "页数msg.what >>>>" + msg.what);// 10 Log.i("andli", "实体msg.what >>>>" + msg.obj); Log.i("andli", "动作msg.arg1 >>>>" + msg.arg1); Log.i("andli", "列表的类别msg.arg2 >>>>" + msg.arg2); // 处理ListView数据,并返回Notice Notice notice = handleListViewData(// msg.what,// 页数 msg.obj,// 实体 msg.arg2,// 类别 msg.arg1// 动作 ); // 小于分页 if (msg.what < pageSize) { mListView.setTag(UIHelper.LISTVIEW_DATA_FULL); adp.notifyDataSetChanged(); moreTextView.setText(R.string.load_full); } // 页数相等 else if (msg.what == pageSize) { mListView.setTag(UIHelper.LISTVIEW_DATA_MORE); adp.notifyDataSetChanged(); moreTextView.setText(R.string.load_more); // 特殊处理-热门动弹不能翻页 if (mListView == lvTweet) { TweetList tlist = (TweetList) msg.obj; if (lvTweetData.size() == tlist.getTweetCount()) { mListView.setTag(UIHelper.LISTVIEW_DATA_FULL); moreTextView.setText(R.string.load_full); } } } // 发送通知广播 if (notice != null) { UIHelper.sendBroadCast(mListView.getContext(), notice); } // 是否清除通知信息 if (isClearNotice) { ClearNotice(curClearNoticeType); isClearNotice = false;// 重置 curClearNoticeType = 0; } } // 有异常--显示加载出错 & 弹出错误消息 else if (msg.what == -1) { mListView.setTag(UIHelper.LISTVIEW_DATA_MORE); moreTextView.setText(R.string.load_error); ((AppException) msg.obj).makeToast(Main.this); } if (adp.getCount() == 0) { mListView.setTag(UIHelper.LISTVIEW_DATA_EMPTY); moreTextView.setText(R.string.load_empty); } progress.setVisibility(ProgressBar.GONE); mHeadProgress.setVisibility(ProgressBar.GONE); if (msg.arg1 == UIHelper.LISTVIEW_ACTION_REFRESH) { Log.i("andli", "刷新完成!"); mListView .onRefreshComplete(getString(R.string.pull_to_refresh_update) + new Date().toLocaleString()); mListView.setSelection(0); } else if (msg.arg1 == UIHelper.LISTVIEW_ACTION_CHANGE_CATALOG) { mListView.onRefreshComplete(); mListView.setSelection(0); } } }; } // msg.what 页数 // msg.obj实体 // msg.arg2 类别 // msg.arg1动作 // 对ListView数据进行处理,同时返回Notice private Notice handleListViewData(int pagesize, Object obj, int objtype, int actiontype) { Log.i("andli", "handleListViewData---actiontype---" + actiontype); Notice notice = null; switch (actiontype) { // 无论是初始化还是刷新动作都执行case4里方法 case UIHelper.LISTVIEW_ACTION_INIT:// 1 case UIHelper.LISTVIEW_ACTION_REFRESH:// 2 case UIHelper.LISTVIEW_ACTION_CHANGE_CATALOG:// 4 notice = doListView_Action_Change_Catalog(notice, pagesize, obj, objtype, actiontype); break; case UIHelper.LISTVIEW_ACTION_SCROLL:// 3 notice = doListView_Action_Scroll(notice, pagesize, obj, objtype, actiontype); break; } return notice; } // private Notice doListView_Action_Scroll(Notice notice, int pagesize, Object obj, int objtype, int actiontype) { switch (objtype) { case UIHelper.LISTVIEW_DATATYPE_NEWS: NewsList list = (NewsList) obj; notice = list.getNotice(); newsListViewSumData += pagesize; if (newsListViewData.size() > 0) { for (News news1 : list.getNewslist()) { boolean b = false; for (News news2 : newsListViewData) { if (news1.getId() == news2.getId()) { b = true; break; } } if (!b) newsListViewData.add(news1); } } else { newsListViewData.addAll(list.getNewslist()); } break; case UIHelper.LISTVIEW_DATATYPE_BLOG: BlogList blist = (BlogList) obj; notice = blist.getNotice(); lvBlogSumData += pagesize; if (lvBlogData.size() > 0) { for (Blog blog1 : blist.getBloglist()) { boolean b = false; for (Blog blog2 : lvBlogData) { if (blog1.getId() == blog2.getId()) { b = true; break; } } if (!b) lvBlogData.add(blog1); } } else { lvBlogData.addAll(blist.getBloglist()); } break; case UIHelper.LISTVIEW_DATATYPE_POST: PostList plist = (PostList) obj; notice = plist.getNotice(); lvQuestionSumData += pagesize; if (lvQuestionData.size() > 0) { for (Post post1 : plist.getPostlist()) { boolean b = false; for (Post post2 : lvQuestionData) { if (post1.getId() == post2.getId()) { b = true; break; } } if (!b) lvQuestionData.add(post1); } } else { lvQuestionData.addAll(plist.getPostlist()); } break; case UIHelper.LISTVIEW_DATATYPE_TWEET: TweetList tlist = (TweetList) obj; notice = tlist.getNotice(); lvTweetSumData += pagesize; if (lvTweetData.size() > 0) { for (Tweet tweet1 : tlist.getTweetlist()) { boolean b = false; for (Tweet tweet2 : lvTweetData) { if (tweet1.getId() == tweet2.getId()) { b = true; break; } } if (!b) lvTweetData.add(tweet1); } } else { lvTweetData.addAll(tlist.getTweetlist()); } break; case UIHelper.LISTVIEW_DATATYPE_ACTIVE: ActiveList alist = (ActiveList) obj; notice = alist.getNotice(); lvActiveSumData += pagesize; if (lvActiveData.size() > 0) { for (Active active1 : alist.getActivelist()) { boolean b = false; for (Active active2 : lvActiveData) { if (active1.getId() == active2.getId()) { b = true; break; } } if (!b) lvActiveData.add(active1); } } else { lvActiveData.addAll(alist.getActivelist()); } break; case UIHelper.LISTVIEW_DATATYPE_MESSAGE: MessageList mlist = (MessageList) obj; notice = mlist.getNotice(); lvMsgSumData += pagesize; if (lvMsgData.size() > 0) { for (Messages msg1 : mlist.getMessagelist()) { boolean b = false; for (Messages msg2 : lvMsgData) { if (msg1.getId() == msg2.getId()) { b = true; break; } } if (!b) lvMsgData.add(msg1); } } else { lvMsgData.addAll(mlist.getMessagelist()); } break; } return notice; } // private Notice doListView_Action_Change_Catalog(Notice notice, int pagesize, Object obj, int objtype, int actiontype) { int newdata = 0;// 新加载数据-只有刷新动作才会使用到 switch (objtype) { // 咨询列表刷新 case UIHelper.LISTVIEW_DATATYPE_NEWS: NewsList newList = (NewsList) obj; notice = newList.getNotice(); newsListViewSumData = pagesize; // 刷新操作 if (actiontype == UIHelper.LISTVIEW_ACTION_REFRESH) { if (newsListViewData.size() > 0) { for (News news1 : newList.getNewslist()) { boolean mboolean = false; // 对比新老数据 for (News news2 : newsListViewData) { if (news1.getId() == news2.getId()) { mboolean = true; break; } } // 不等就新增 if (!mboolean) newdata++; } } else { newdata = pagesize; } } newsListViewData.clear();// 先清除原有数据 newsListViewData.addAll(newList.getNewslist()); break; // 博客列表刷新 case UIHelper.LISTVIEW_DATATYPE_BLOG: BlogList blist = (BlogList) obj; notice = blist.getNotice(); lvBlogSumData = pagesize; if (actiontype == UIHelper.LISTVIEW_ACTION_REFRESH) { if (lvBlogData.size() > 0) { for (Blog blog1 : blist.getBloglist()) { boolean b = false; for (Blog blog2 : lvBlogData) { if (blog1.getId() == blog2.getId()) { b = true; break; } } if (!b) newdata++; } } else { newdata = pagesize; } } lvBlogData.clear();// 先清除原有数据 lvBlogData.addAll(blist.getBloglist()); break; // 推荐阅读列表刷新 case UIHelper.LISTVIEW_DATATYPE_POST: PostList plist = (PostList) obj; notice = plist.getNotice(); lvQuestionSumData = pagesize; if (actiontype == UIHelper.LISTVIEW_ACTION_REFRESH) { if (lvQuestionData.size() > 0) { for (Post post1 : plist.getPostlist()) { boolean b = false; for (Post post2 : lvQuestionData) { if (post1.getId() == post2.getId()) { b = true; break; } } if (!b) newdata++; } } else { newdata = pagesize; } } lvQuestionData.clear();// 先清除原有数据 lvQuestionData.addAll(plist.getPostlist()); break; case UIHelper.LISTVIEW_DATATYPE_TWEET: TweetList tlist = (TweetList) obj; notice = tlist.getNotice(); lvTweetSumData = pagesize; if (actiontype == UIHelper.LISTVIEW_ACTION_REFRESH) { if (lvTweetData.size() > 0) { for (Tweet tweet1 : tlist.getTweetlist()) { boolean b = false; for (Tweet tweet2 : lvTweetData) { if (tweet1.getId() == tweet2.getId()) { b = true; break; } } if (!b) newdata++; } } else { newdata = pagesize; } } lvTweetData.clear();// 先清除原有数据 lvTweetData.addAll(tlist.getTweetlist()); break; case UIHelper.LISTVIEW_DATATYPE_ACTIVE: ActiveList alist = (ActiveList) obj; notice = alist.getNotice(); lvActiveSumData = pagesize; if (actiontype == UIHelper.LISTVIEW_ACTION_REFRESH) { if (lvActiveData.size() > 0) { for (Active active1 : alist.getActivelist()) { boolean b = false; for (Active active2 : lvActiveData) { if (active1.getId() == active2.getId()) { b = true; break; } } if (!b) newdata++; } } else { newdata = pagesize; } } lvActiveData.clear();// 先清除原有数据 lvActiveData.addAll(alist.getActivelist()); break; case UIHelper.LISTVIEW_DATATYPE_MESSAGE: MessageList mlist = (MessageList) obj; notice = mlist.getNotice(); lvMsgSumData = pagesize; if (actiontype == UIHelper.LISTVIEW_ACTION_REFRESH) { if (lvMsgData.size() > 0) { for (Messages msg1 : mlist.getMessagelist()) { boolean b = false; for (Messages msg2 : lvMsgData) { if (msg1.getId() == msg2.getId()) { b = true; break; } } if (!b) newdata++; } } else { newdata = pagesize; } } lvMsgData.clear();// 先清除原有数据 lvMsgData.addAll(mlist.getMessagelist()); break; } // 如果是刷新动作 if (actiontype == UIHelper.LISTVIEW_ACTION_REFRESH) { if (newdata > 0) { // 提示新加载数据:播放声音 String text = getString(R.string.new_data_toast_message, newdata); NewDataToast.makeText(this, text, appContext.isAppSound()) .show(); } else { // 提示无新数据:不播放提示音 NewDataToast.makeText(this, "没有新更新", false).show(); } } return notice; } /************************************ 通知信息的处理 ***************************************/ // 轮询通知信息 private void foreachUserNotice() { final int uid = appContext.getLoginUid(); final Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1) { UIHelper.sendBroadCast(Main.this, (Notice) msg.obj); } foreachUserNotice();// 回调 } }; new Thread() { public void run() { Message msg = new Message(); try { sleep(60 * 1000); if (uid > 0) { Notice notice = appContext.getUserNotice(uid); msg.what = 1; msg.obj = notice; } else { msg.what = 0; } } catch (AppException e) { e.printStackTrace(); msg.what = -1; } catch (Exception e) { e.printStackTrace(); msg.what = -1; } handler.sendMessage(msg); } }.start(); } /** * 通知信息处理 * * @param type * 1:@我的信息 2:未读消息 3:评论个数 4:新粉丝个数 */ private void ClearNotice(final int type) { final int uid = appContext.getLoginUid(); final Handler handler = new Handler() { public void handleMessage(Message msg) { if (msg.what == 1 && msg.obj != null) { Result res = (Result) msg.obj; if (res.OK() && res.getNotice() != null) { UIHelper.sendBroadCast(Main.this, res.getNotice()); } } else { ((AppException) msg.obj).makeToast(Main.this); } } }; new Thread() { public void run() { Message msg = new Message(); try { Result res = appContext.noticeClear(uid, type); msg.what = 1; msg.obj = res; } catch (AppException e) { e.printStackTrace(); msg.what = -1; msg.obj = e; } handler.sendMessage(msg); } }.start(); } /************************************ 菜单,按钮事件 ***************************************/ // 停用原生菜单 public boolean onCreateOptionsMenu(Menu menu) { return false; // MenuInflater inflater = getMenuInflater(); // inflater.inflate(R.menu.main_menu, menu); // return true; } // 菜单被显示之前的事件 public boolean onPrepareOptionsMenu(Menu menu) { UIHelper.showMenuLoginOrLogout(this, menu); return true; } // 处理menu的事件 public boolean onOptionsItemSelected(MenuItem item) { int item_id = item.getItemId(); switch (item_id) { case R.id.main_menu_user: UIHelper.loginOrLogout(this); break; case R.id.main_menu_about: UIHelper.showAbout(this); break; case R.id.main_menu_setting: UIHelper.showSetting(this); break; case R.id.main_menu_exit: UIHelper.Exit(this); break; } return true; } // 按钮事件---监听返回--是否退出程序 public boolean onKeyDown(int keyCode, KeyEvent event) { boolean flag = true; if (keyCode == KeyEvent.KEYCODE_BACK) { UIHelper.Exit(this);// 是否退出应用 } else if (keyCode == KeyEvent.KEYCODE_MENU) { UIHelper.showSettingLoginOrLogout(Main.this, mGrid.getQuickAction(0));// 展示快捷栏&判断是否登录 mGrid.show(fbSetting, true); } else if (keyCode == KeyEvent.KEYCODE_SEARCH) { UIHelper.showSearch(Main.this);// 展示搜索页 } else { flag = super.onKeyDown(keyCode, event); } return flag; } }