@Override
  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    switch (getCurrentState(savedInstanceState)) {
      case FIRST_TIME_START:
        getLoaderManager().initLoader(DB_CACHE_LOADER_ID, null, dbCallback);
        break;
      case ACTIVITY_DESTROY_AND_CREATE:
        userBean = savedInstanceState.getParcelable(Constants.USERBEAN);
        accountBean = savedInstanceState.getParcelable(Constants.ACCOUNT);
        token = savedInstanceState.getString(Constants.TOKEN);
        timeLinePosition =
            (TimeLinePosition) savedInstanceState.getSerializable("timeLinePosition");
        unreadBean = savedInstanceState.getParcelable("unreadBean");

        Loader<CommentTimeLineData> loader = getLoaderManager().getLoader(DB_CACHE_LOADER_ID);
        if (loader != null) {
          getLoaderManager().initLoader(DB_CACHE_LOADER_ID, null, dbCallback);
        }

        CommentListBean savedBean =
            (CommentListBean) savedInstanceState.getSerializable(Constants.BEAN);
        if (savedBean != null && savedBean.getSize() > 0) {
          clearAndReplaceValue(savedBean);
          timeLineAdapter.notifyDataSetChanged();
          // setListViewPositionFromPositionsCache();
        } else {
          getLoaderManager().initLoader(DB_CACHE_LOADER_ID, null, dbCallback);
        }
        break;
    }
  }
 private void addUnreadMessage(CommentListBean data) {
   if (data != null && data.getSize() > 0) {
     CommentBean last = data.getItem(data.getSize() - 1);
     boolean dup = getDataList().getItemList().contains(last);
     if (!dup) {
       addNewDataAndRememberPosition(data);
     }
   }
 }
 @Override
 protected void onNewMsgLoaderSuccessCallback(CommentListBean newValue, Bundle loaderArgs) {
   if (newValue != null && newValue.getItemList() != null && newValue.getItemList().size() > 0) {
     addNewDataAndRememberPosition(newValue);
   }
   unreadBean = null;
   NotificationManager notificationManager =
       (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE);
   notificationManager.cancel(
       NotificationServiceHelper.getCommentsToMeNotificationId(
           BeeboApplication.getInstance().getAccountBean()));
 }
 @Override
 protected void onOldMsgLoaderSuccessCallback(CommentListBean newValue) {
   if (newValue != null && newValue.getItemList().size() > 1) {
     getDataList().addOldData(newValue);
     getAdapter().notifyDataSetChanged();
     CommentToMeTimeLineDBTask.asyncReplace(getDataList(), accountBean.getUid());
   }
 }
  private void addNewDataAndRememberPosition(final CommentListBean newValue) {

    int initSize = getDataList().getSize();

    if (getActivity() != null && newValue.getSize() > 0) {

      final boolean jumpToTop = getDataList().getSize() == 0;

      getDataList().addNewData(newValue);

      if (!jumpToTop) {
        int index = getListView().getFirstVisiblePosition();
        getAdapter().notifyDataSetChanged();
        int finalSize = getDataList().getSize();
        final int positionAfterRefresh =
            index + finalSize - initSize + getListView().getHeaderViewsCount();
        // use 1 px to show newMsgTipBar
        Utility.setListViewSelectionFromTop(
            getListView(),
            positionAfterRefresh,
            1,
            new Runnable() {

              @Override
              public void run() {
                newMsgTipBar.setValue(newValue, false);
              }
            });
      } else {
        newMsgTipBar.setValue(newValue, true);
        newMsgTipBar.clearAndReset();
        getAdapter().notifyDataSetChanged();
        getListView().setSelection(0);
      }
      CommentToMeTimeLineDBTask.asyncReplace(getDataList(), accountBean.getUid());
      saveTimeLinePositionToDB();
    }
  }
  @Deprecated
  public static String getTicker(
      UnreadBean unreadBean,
      MessageListBean mentionsWeibo,
      CommentListBean mentionsComment,
      CommentListBean commentsToMe) {
    int unreadMentionCmt = unreadBean.getMention_cmt();
    int unreadMentionStatus = unreadBean.getMention_status();
    int mention = 0;
    if (SettingUtils.allowMentionToMe() && unreadMentionStatus > 0 && mentionsWeibo != null) {
      int actualFetchedSize = mentionsWeibo.getSize();
      if (actualFetchedSize < Integer.valueOf(SettingUtils.getMsgCount())) {
        mention += actualFetchedSize;
      } else {
        mention += Math.max(actualFetchedSize, unreadMentionStatus);
      }
    }
    if (SettingUtils.allowMentionCommentToMe() && unreadMentionCmt > 0 && mentionsComment != null) {
      int actualFetchedSize = mentionsComment.getSize();
      if (actualFetchedSize < Integer.valueOf(SettingUtils.getMsgCount())) {
        mention += actualFetchedSize;
      } else {
        mention += Math.max(actualFetchedSize, unreadMentionCmt);
      }
    }

    StringBuilder stringBuilder = new StringBuilder();
    if (mention > 0) {
      String txt =
          String.format(
              BeeboApplication.getInstance().getString(R.string.new_mentions),
              String.valueOf(mention));
      stringBuilder.append(txt);
    }

    int unreadCmt = unreadBean.getCmt();

    int cmt = 0;

    if (SettingUtils.allowCommentToMe() && unreadCmt > 0 && commentsToMe != null) {
      //
      int actualFetchedSize = commentsToMe.getSize();
      if (actualFetchedSize < Integer.valueOf(SettingUtils.getMsgCount())) {
        cmt += actualFetchedSize;
      } else {
        cmt += Math.max(actualFetchedSize, unreadCmt);
      }

      if (mention > 0) {
        stringBuilder.append("、");
      }

      if (cmt > 0) {
        String txt =
            String.format(
                BeeboApplication.getInstance().getString(R.string.new_comments),
                String.valueOf(cmt));
        stringBuilder.append(txt);
      }
    }
    return stringBuilder.toString();
  }
 protected void clearAndReplaceValue(CommentListBean value) {
   getDataList().getItemList().clear();
   getDataList().getItemList().addAll(value.getItemList());
 }