@Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

          mSearchBar.updateCursorState(false);

          Node curNode = adapter.getItem(position);

          if (!curNode.isDept()) {

            if (adapter.getItem(position).getId() == EngineConst.uId) {
              EmployeeDetailActivity.launch(mContext);

            } else {
              Intent intent = new Intent(mContext, DialogueActivity.class);
              Bundle data = new Bundle();
              data.putInt("cid", EngineConst.cId);
              data.putInt("uid", curNode.getId());
              data.putString("name", curNode.getNodeData().nodeName);
              data.putBoolean("sex", curNode.getNodeData().isBoy);

              LogFactory.d(
                  "data",
                  "cid="
                      + EngineConst.cId
                      + "  uid ="
                      + curNode.getId()
                      + "  mName= "
                      + curNode.getNodeData().nodeName);

              Integer myMsgUserid = curNode.getId();
              if (!IMOApp.sendMsgUserId.isEmpty()) {
                if (IMOApp.sendMsgUserId.contains(curNode.getId())) {
                  IMOApp.sendMsgUserId.remove(myMsgUserid);
                  System.out.println("剩余的 msg id-----" + IMOApp.sendMsgUserId);
                  if (IMOApp.sendMsgUserId.isEmpty()) {
                    MainActivityGroup.getActivityGroup().mHandler.sendEmptyMessage(0);
                  }
                }
              }
              startActivity(intent.putExtras(data));
            }
          } else {

            mStructNavView.setVisibility(View.VISIBLE);
            adapter.showChildNodes(curNode);
            mListView.setSelection(0); // / for selected first node
            if (mStructNavView.getViewGroupChildCount() == 0) {
              mStructNavView.addItem(rootNodeDept.getNodeData().nodeName, rootNodeDept);
            }
            mStructNavView.addItem(curNode.getNodeData().nodeName, curNode);
            // 实现导航点击事件的封装。
            mStructNavView.setOnItemClickListener(adapter);
          }
        }
  /** 更新显示List的状态 */
  private void update2State(boolean state) {

    mSearchBar.updateCursorState(state);
    // state = !state;
    if (!state) {
      organizeView.setVisibility(View.VISIBLE);
      mSearchRestltListView.setVisibility(View.GONE);
    } else {
      // 显示搜索结果状态
      mSearchRestltListView.setVisibility(View.VISIBLE);
      organizeView.setVisibility(View.GONE);
    }
  }
  @Override
  protected void registerEvents() {
    String isFirstLoading =
        (String) PreferenceManager.get("IMOLoading", new String[] {"isFirstLoading", "no"});
    MainActivityGroup.getActivityGroup().updateTipShow(!isFirstLoading.equals("yes"));

    if (getTcpConnection() == null) {
      resetConnection();
      if (getTcpConnection() != null) {
        IMOApp.getDataEngine().addToObserverList(this);
      }
    } else {
      IMOApp.getDataEngine().addToObserverList(this);
    }

    // //1- 更新自己的状态 login over
    doRequestOwnState();
    // / 2- 发送CrashReport
    sendCrashMSG();

    getOrganizeTree();

    getContactTree();

    mTitleBar.setSystemSetListener(
        new OnTouchListener() {

          @Override
          public boolean onTouch(View v, MotionEvent event) {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
              return true;
            }
            if (event.getAction() == MotionEvent.ACTION_UP) {
              SystemSetActivity.launch(OrganizeActivity.this);
              return true;
            }

            return true;
          }
        });

    mTitleBar.setFaceOnClickListener(
        new View.OnClickListener() {

          @Override
          public void onClick(View v) {
            UserConfigActivity.launch(mContext);
          }
        });

    // ///状态弹窗显示
    mTitleBar.setStateOnClickListener(
        new View.OnClickListener() {

          @Override
          public void onClick(View v) {
            mChangeStatePop.popUp(getWindow().getDecorView());
          }
        });

    mChangeStatePop.setListener(
        new OnStateClickListener() {

          @Override
          public void onClickAction() {
            Globe.canConnect = false;
            requestLogOut(false);
          }
        });

    mChangeStatePop.setReLoginListener(
        new OnStateClickListener() {

          @Override
          public void onClickAction() {
            if (EngineConst.isNetworkValid && EngineConst.isReloginSuccess) {
              return;
            } else if (ConnectionChangeReceiver.pingAddress()) {
              System.out.println("shoudong old connection id = " + EngineConst.IMO_CONNECTION_ID);
              EngineConst.isReloginSuccess = false;
              String oldConnectionID = EngineConst.IMO_CONNECTION_ID;

              EngineConst.IMO_CONNECTION_ID = EngineConst.GenerateRandomString();

              System.out.println(
                  "shoudong new connection id :"
                      + EngineConst.IMO_CONNECTION_ID
                      + ",old connectionID :"
                      + oldConnectionID);

              AppService.getService()
                  .setTcpConnection(
                      (TCPConnection)
                          AppService.getService()
                              .getNIOThreadInstance()
                              .newTCPConnection(
                                  EngineConst.IMO_CONNECTION_ID,
                                  EngineConst.IMO_SERVER_ADDRESS,
                                  true));

              AppService.getService().getNIOThreadInstance().release(oldConnectionID, false);

              ReloginOutPacket out =
                  new ReloginOutPacket(
                      ByteBuffer.wrap(EngineConst.sessionKey),
                      IMOCommand.IMO_GET_RELOGIN,
                      EngineConst.cId,
                      EngineConst.uId);
              AppService.getService()
                  .getNIOThreadInstance()
                  .send(EngineConst.IMO_CONNECTION_ID, out, false);
            }
          }
        });

    mSearchBar.setOnClickEvent();

    mSearchBar.setOnSearchListener(
        new OnSearchListener() {

          @Override
          public void onSearch(View v) {
            LogFactory.d(TAG, "Dynamic key = " + ((EditText) v).getText());

            doSearch(((EditText) v).getText().toString().trim());
          }

          private void doSearch(String key) {
            // 查询的结果UIDList
            update2State(true);
            // 数据库中查询结果
            ArrayList<Integer> deptUserId = IMOApp.imoStorage.search(key);

            if (deptUserId != null) {
              mSearchResultAdapter.setShowData(getSearchResult(deptUserId));
              mSearchRestltListView.setAdapter(mSearchResultAdapter);
            } else {
              mSearchResultAdapter.setEmpty();
            }
          }

          @Override
          public void initState() {
            update2State(false);
          }
        });

    mSearchRestltListView.setOnItemClickListener(
        new OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) {
            if (mSearchResultAdapter.getItem(position).getId() == EngineConst.uId) {
              EmployeeDetailActivity.launch(mContext);

            } else {
              Intent intent = new Intent(mContext, DialogueActivity.class);
              Bundle data = new Bundle();
              Node curNode = mSearchResultAdapter.getItem(position);
              data.putInt("cid", curNode.getCid());
              data.putInt("uid", curNode.getId());
              data.putString("name", curNode.getNodeData().nodeName);
              data.putBoolean("sex", curNode.getNodeData().isBoy);
              startActivity(intent.putExtras(data));
            }
          }
        });
  }