/** 重新验证当前ChannelList是否是对的 */
  private void checkChannelList() {
    ArrayList<SubItem> groupSubItems = adapter.getSubLists().get(1);
    groupSubItems.clear();
    if (UserAPI.isLoggedIn()) {
      groupSubItems.add(
          new SubItem(SubItem.Section_Post, SubItem.Type_Private_Channel, "我的小组", "user_group"));
    }
    if (GroupHelper.getMyGroupsNumber() > 0) {
      // 如果已经加载了栏目
      groupSubItems.add(
          new SubItem(SubItem.Section_Post, SubItem.Type_Collections, "小组热贴", "hot_posts"));
      groupSubItems.addAll(GroupHelper.getSelectedGroupSubItems());
    } else {
      groupSubItems.addAll(ChannelHelper.getPosts());
    }

    ArrayList<SubItem> questionSubItems = adapter.getSubLists().get(2);
    questionSubItems.clear();
    if (AskTagHelper.getAskTagsNumber() > 0) {
      // 如果已经加载了栏目
      questionSubItems.add(
          new SubItem(SubItem.Section_Question, SubItem.Type_Collections, "热门问答", "hottest"));
      questionSubItems.add(
          new SubItem(SubItem.Section_Question, SubItem.Type_Collections, "精彩回答", "highlight"));
      questionSubItems.addAll(AskTagHelper.getSelectedQuestionSubItems());
    } else {
      questionSubItems.addAll(ChannelHelper.getQuestions());
    }
    adapter.notifyDataSetInvalidated();
  }
 @Override
 protected ResponseObject doInBackground(String[] params) {
   ResponseObject<ArrayList<SubItem>> result = QuestionAPI.getAllMyTags();
   if (TextUtils.isEmpty(UserAPI.getUserID())) {
     result.error_message = "无法获得用户id";
     result.error = ResponseError.NO_USER_ID;
   } else if (result.ok) {
     ArrayList<SubItem> subItems = result.result;
     ArrayList<AskTag> myTags = new ArrayList<>();
     for (int i = 0; i < subItems.size(); i++) {
       SubItem item = subItems.get(i);
       AskTag myTag = new AskTag();
       myTag.setName(item.getName());
       myTag.setValue(item.getValue());
       myTag.setType(item.getType());
       myTag.setSection(item.getSection());
       myTag.setSelected(i < defaultTagsNumber);
       myTag.setOrder(i);
       myTags.add(myTag);
     }
     mergeMyGroups(myTags);
     AskTagHelper.putAllMyTags(myTags);
     getButtons();
   }
   return result;
 }
  private void recommend() {
    if (!UserAPI.isLoggedIn()) {
      notifyNeedLog();
    } else {
      MobclickAgent.onEvent(this, Mob.Event_Recommend_Question);
      InputDialog.Builder builder = new InputDialog.Builder(this);
      builder.setTitle(R.string.recommend_question);
      builder.setCancelable(true);
      builder.setCanceledOnTouchOutside(false);
      builder.setOnClickListener(
          new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
              if (which == DialogInterface.BUTTON_POSITIVE) {
                InputDialog d = (InputDialog) dialog;
                String text = d.InputString;
                RecommendTask recommendTask = new RecommendTask();
                recommendTask.executeOnExecutor(
                    AsyncTask.THREAD_POOL_EXECUTOR,
                    question.getId(),
                    question.getTitle(),
                    question.getSummary(),
                    text);
              }
            }
          });
      InputDialog inputDialog = builder.create();
      inputDialog.show();
    }
  }
 private void favor() {
   if (!UserAPI.isLoggedIn()) {
     notifyNeedLog();
   } else {
     MobclickAgent.onEvent(this, Mob.Event_Favor_Question);
     new FavorDialog.Builder(this).setTitle(R.string.action_favor).create(question).show();
   }
 }
 private void answerQuestion() {
   if (!UserAPI.isLoggedIn()) {
     notifyNeedLog();
   } else {
     Intent intent = new Intent(this, ReplyActivity.class);
     intent.putExtra(Consts.Extra_Ace_Model, question);
     startActivity(intent);
     overridePendingTransition(R.anim.slide_in_right, 0);
   }
 }
 private void onUserViewClicked() {
   if (!UserAPI.isLoggedIn()) {
     Intent intent = new Intent(getActivity(), LoginActivity.class);
     startActivityForResult(intent, Consts.Code_Login);
     getActivity().overridePendingTransition(R.anim.slide_in_right, 0);
   } else {
     String nameString = SharedPreferencesUtil.readString(Consts.Key_User_Name, "");
     if (TextUtils.isEmpty(nameString)) {
       loadUserInfo();
     } else {
       Intent intent = new Intent(getActivity(), MessageCenterActivity.class);
       startActivityForResult(intent, Consts.Code_Message_Center);
       getActivity().overridePendingTransition(R.anim.slide_in_right, 0);
     }
   }
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
   // Inflate the menu; this adds items to the action bar if it is present.
   getMenuInflater().inflate(R.menu.menu_question, menu);
   try {
     Method m = menu.getClass().getDeclaredMethod("setOptionalIconsVisible", Boolean.TYPE);
     m.setAccessible(true);
     m.invoke(menu, true);
   } catch (Exception e) {
     e.printStackTrace();
   }
   if (!UserAPI.isLoggedIn()) {
     menu.findItem(R.id.action_follow_question).setVisible(false);
     menu.findItem(R.id.action_unfollow_question).setVisible(false);
   }
   return true;
 }
 @Override
 protected ResultObject<ArrayList<AceModel>> doInBackground(Integer... params) {
   if (!TextUtils.isEmpty(notice_id)) {
     UserAPI.ignoreOneNotice(notice_id);
     notice_id = null;
   }
   offset = params[0];
   if (offset < 0) {
     ResultObject<Question> questionResult = QuestionAPI.getQuestionDetailByID(question.getId());
     if (questionResult.ok) {
       publishProgress(questionResult);
       return QuestionAPI.getQuestionAnswers(question.getId(), 0);
     } else {
       return new ResultObject<>();
     }
   } else {
     return QuestionAPI.getQuestionAnswers(question.getId(), offset);
   }
 }
 @Override
 protected void onPostExecute(ResponseObject result) {
   progressDialog.dismiss();
   if (result.ok) {
     MobclickAgent.onEvent(ShuffleTagActivity.this, Mob.Event_Load_My_Tags_OK);
     initView();
   } else {
     MobclickAgent.onEvent(ShuffleTagActivity.this, Mob.Event_Load_My_Tags_Failed);
     MobclickAgent.reportError(
         ShuffleTagActivity.this,
         "加载标签失败\n是否WIFI:"
             + Config.isWifi()
             + "\n"
             + UserAPI.getUserInfoString()
             + result.error_message);
     if (result.error == ResponseError.NO_USER_ID) {
       toast("未获得用户ID,无法加载");
     } else {
       toast("加载标签失败");
     }
   }
 }
 @Override
 protected ResultObject<UserInfo> doInBackground(String... params) {
   return UserAPI.getUserInfoByUkey(UserAPI.getUkey());
 }
 @Override
 protected ResultObject doInBackground(Void... params) {
   return UserAPI.testLogin();
 }
 @Override
 protected ResultObject<ReminderNoticeNum> doInBackground(Void... params) {
   return UserAPI.getReminderAndNoticeNum();
 }
 private void loadUserInfo() {
   if (UserAPI.isLoggedIn()) {
     UserInfoTask task = new UserInfoTask();
     task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
   }
 }
  private void recheckData() {
    if (isFirstLoad) {
      if (UserAPI.isLoggedIn()) {
        String nameString = SharedPreferencesUtil.readString(Consts.Key_User_Name, "");
        if (!TextUtils.isEmpty(nameString)) {
          userName.setText(nameString);
        }
        String avatarString = SharedPreferencesUtil.readString(Consts.Key_User_Avatar, "");
        if (!TextUtils.isEmpty(avatarString)) {
          if (Config.shouldLoadImage()) {
            Picasso.with(getActivity())
                .load(avatarString)
                .resizeDimen(
                    R.dimen.list_standard_comment_avatar_dimen,
                    R.dimen.list_standard_comment_avatar_dimen)
                .placeholder(R.drawable.default_avatar)
                .transform(new RoundTransformation(Color.parseColor("#00000000"), 0, true))
                .into(avatarView);
          } else {
            avatarView.setImageResource(R.drawable.default_avatar);
          }
        }
        testLogin();
      }
      isFirstLoad = false;
    } else {
      if (loginState != UserAPI.isLoggedIn()) {
        checkChannelList();
        if (UserAPI.isLoggedIn()) {
          loadUserInfo();
        } else {
          back2UnLogged();
        }
      } else {
        if (UserAPI.isLoggedIn()) {
          if (userKey != null
              && userKey.equals(SharedPreferencesUtil.readString(Consts.Key_Ukey, ""))) {
            String avatarString = SharedPreferencesUtil.readString(Consts.Key_User_Avatar, "");
            if (!TextUtils.isEmpty(avatarString)) {
              if (Config.shouldLoadImage()) {
                Picasso.with(getActivity())
                    .load(avatarString)
                    .placeholder(R.drawable.default_avatar)
                    .resizeDimen(
                        R.dimen.list_standard_comment_avatar_dimen,
                        R.dimen.list_standard_comment_avatar_dimen)
                    .transform(new RoundTransformation(Color.parseColor("#00000000"), 0, true))
                    .into(avatarView);
              } else {
                avatarView.setImageResource(R.drawable.default_avatar);
              }
            }
            // 重新加载小组数据库
            long lastGroupDBVersion =
                SharedPreferencesUtil.readLong(Consts.Key_Last_Post_Groups_Version, 0);
            if (currentGroupDBVersion != lastGroupDBVersion) {
              ArrayList<SubItem> groupSubItems = adapter.getSubLists().get(1);
              groupSubItems.clear();
              groupSubItems.add(
                  new SubItem(
                      SubItem.Section_Post, SubItem.Type_Private_Channel, "我的小组", "user_group"));
              if (GroupHelper.getMyGroupsNumber() > 0) {
                // 如果已经加载了栏目
                groupSubItems.add(
                    new SubItem(
                        SubItem.Section_Post, SubItem.Type_Collections, "小组热贴", "hot_posts"));
                groupSubItems.addAll(GroupHelper.getSelectedGroupSubItems());
              } else {
                groupSubItems.addAll(ChannelHelper.getPosts());
              }
            }
            currentGroupDBVersion = lastGroupDBVersion;

            // 重新加载标签数据库
            long lastTagDBVersion =
                SharedPreferencesUtil.readLong(Consts.Key_Last_Ask_Tags_Version, 0);
            if (currentTagDBVersion != lastTagDBVersion) {
              ArrayList<SubItem> questionSubItems = adapter.getSubLists().get(2);
              if (AskTagHelper.getAskTagsNumber() > 0) {
                // 如果已经加载了栏目
                questionSubItems.clear();
                questionSubItems.add(
                    new SubItem(
                        SubItem.Section_Question, SubItem.Type_Collections, "热门问答", "hottest"));
                questionSubItems.add(
                    new SubItem(
                        SubItem.Section_Question, SubItem.Type_Collections, "精彩回答", "highlight"));
                questionSubItems.addAll(AskTagHelper.getSelectedQuestionSubItems());
              } else {
                questionSubItems.clear();
                questionSubItems.addAll(ChannelHelper.getQuestions());
              }
            }
            currentTagDBVersion = lastTagDBVersion;
            adapter.notifyDataSetChanged();
          } else {
            // 切换了用户的话
            checkChannelList();
            loadUserInfo();
          }
        }
      }
    }
    loginState = UserAPI.isLoggedIn();
    userKey = SharedPreferencesUtil.readString(Consts.Key_Ukey, "");
    if (loginState) {
      loadMessages();
    } else {
      noticeView.setVisibility(View.GONE);
    }
  }