private void updateFooterHeight(float delta) {
    int height = mFooterView.getBottomMargin() + (int) delta;
    if (mEnablePullLoad && !mPullLoading) {
      if (height > PULL_LOAD_MORE_DELTA) { // height enough to invoke load
        // more.
        mFooterView.setState(PullToRefreshListFooter.STATE_READY);
      } else {
        mFooterView.setState(PullToRefreshListFooter.STATE_NORMAL);
      }
    }
    mFooterView.setBottomMargin(height);

    // setSelection(mTotalItemCount - 1); // scroll to bottom
  }
 private void startLoadMore() {
   mPullLoading = true;
   mFooterView.setState(PullToRefreshListFooter.STATE_LOADING);
   if (mListViewListener != null) {
     mListViewListener.onLoadMore();
   }
 }
 /**
  * enable or disable pull up load more feature.
  *
  * @param enable
  */
 public void setPullLoadEnable(boolean enable) {
   mEnablePullLoad = enable;
   if (!mEnablePullLoad) {
     mFooterView.hide();
     mFooterView.setOnClickListener(null);
   } else {
     mPullLoading = false;
     mFooterView.show();
     mFooterView.setState(PullToRefreshListFooter.STATE_NORMAL);
     // both "pull up" and "click" will invoke load more.
     mFooterView.setOnClickListener(
         new OnClickListener() {
           @Override
           public void onClick(View v) {
             startLoadMore();
           }
         });
   }
 }
 /** stop load more, reset footer view. */
 public void stopLoadMore() {
   if (mPullLoading == true) {
     mPullLoading = false;
     mFooterView.setState(PullToRefreshListFooter.STATE_NORMAL);
   }
 }