View = (TextView) mHeaderView
? ? .findViewById(R.id.xlistview_header_time);
? addHeaderView(mHeaderView);
? // init footer view
? mFooterView = new XListViewFooter(context);
? // init header height
? mHeaderView.getViewTreeObserver().addOnGlobalLayoutListener(
? ? new OnGlobalLayoutListener() {
? ? ?@Override
? ? ?public void onGlobalLayout() {
? ? ? mHeaderViewHeight = mHeaderViewContent.getHeight();
? ? ? getViewTreeObserver()
? ? ? ? .removeGlobalOnLayoutListener(this);
? ? ?}
? ? });
?}
?@Override
?public void setAdapter(ListAdapter adapter) {
? // make sure XListViewFooter is the last footer view, and only add once.
? if (mIsFooterReady == false) {
? ?mIsFooterReady = true;
? ?addFooterView(mFooterView);
? }
? super.setAdapter(adapter);
?}
?/**
? * enable or disable pull down refresh feature.
? *
? * @param enable
? */
?public void setPullRefreshEnable(boolean enable) {
? mEnablePullRefresh = enable;
? if (!mEnablePullRefresh) { // disable, hide the content
? ?mHeaderViewContent.setVisibility(View.INVISIBLE);
? } else {
? ?mHeaderViewContent.setVisibility(View.VISIBLE);
? }
?}
?/**
? * enable or disable pull up load more feature.
? *
? * @param enable
? */
?public void setPullLoadEnable(boolean enable) {
? mEnablePullLoad = enable;
? if (!mEnablePullLoad) {
? ?mFooterView.hide();
? ?mFooterView.setOnClickListener(null);
? ?//make sure "pull up" don't show a line in bottom when listview with one page
? ?setFooterDividersEnabled(false);
? } else {
? ?mPullLoading = false;
? ?mFooterView.show();
? ?mFooterView.setState(XListViewFooter.STATE_NORMAL);
? ?//make sure "pull up" don't show a line in bottom when listview with one page?
? ?setFooterDividersEnabled(true);
? ?// both "pull up" and "click" will invoke load more.
? ?mFooterView.setOnClickListener(new OnClickListener() {
? ? @Override
? ? public void onClick(View v) {
? ? ?startLoadMore();
? ? }
? ?});
? }
?}
?/**
? * stop refresh, reset header view.
? */
?public void stopRefresh() {
? if (mPullRefreshing == true) {
? ?mPullRefreshing = false;
? ?resetHeaderHeight();
? }
?}
?/**
? * stop load more, reset footer view.
? */
?public void stopLoadMore() {
? if (mPullLoading == true) {
? ?mPullLoading = false;
? ?mFooterView.setState(XListViewFooter.STATE_NORMAL);
? }
?}
?/**
? * set last refresh time
? *
? * @param time
? */
?public void setRefreshTime(String time) {
? mHeaderTimeView.setText(time);
?}
?private void invokeOnScrolling() {
? if (mScrollListener instanceof OnXScrollListener) {
? ?OnXScrollListener l = (OnXScrollListener) mScrollListener;
? ?l.onXScrolling(this);
? }
?}
?private void updateHeaderHeight(float delta) {
? mHeaderView.setVisiableHeight((int) delta
? ? + mHeaderView.getVisiableHeight());
? if (mEnablePullRefresh && !mPullRefreshing) { // 鏈浜庡埛鏂扮姸鎬侊紝鏇存柊绠ご
? ?if (mHeaderView.getVisiableHeight() > mHeaderViewHeight) {
? ? mHeaderView.setState(XListViewHeader.STATE_READY);
? ?} else {
? ? mHeaderView.setState(XListViewHeader.STATE_NORMAL);
? ?}
? }
? setSelection(0); // scroll to top each time
?}
?/**
? * reset header view's height.
? */
?private void resetHeaderHeight() {
? int height = mHeaderView.getVisiableHeight();
? if (height == 0) // not visible.
? ?return;
? // refreshing and header isn't shown fully. do nothing.
? if (mPullRefreshing && height <= mHeaderViewHeight) {
? ?return;
? }
? int finalHeight = 0; // default: scroll back to dismiss header.
? // is refreshing, just scroll back to show all the header.
? if (mPullRefreshing && height > mHeaderViewHeight) {
? ?finalHei