Android Open Source - XPullToRefreshListView Load More List View






From Project

Back to project page XPullToRefreshListView.

License

The source code is released under:

MIT License

If you think the Android project XPullToRefreshListView listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.custom.widget;
/*from  w ww  .  j  a v a  2 s . co  m*/
 

import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AbsListView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.AbsListView.OnScrollListener;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;

public class LoadMoreListView extends ListView implements OnScrollListener {


  /**
   * Listener that will receive notifications every time the list scrolls.
   */
  private OnScrollListener mOnScrollListener;
  private LayoutInflater mInflater;

  // footer view
  private RelativeLayout mFooterView;
  // private TextView mLabLoadMore;
  private ProgressBar mProgressBarLoadMore;

  // Listener to process load more items when user reaches the end of the list
  private OnLoadMoreListener mOnLoadMoreListener;
  // To know if the list is loading more items
  private boolean mIsLoadingMore = false;
  private int mCurrentScrollState;

  public LoadMoreListView(Context context) {
    super(context);
    init(context);
  }

  public LoadMoreListView(Context context, AttributeSet attrs) {
    super(context, attrs);
    init(context);
  }

  public LoadMoreListView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    init(context);
  }

  private void init(Context context) {

    mInflater = (LayoutInflater) context
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    // footer
    mFooterView = (RelativeLayout) mInflater.inflate(
        R.layout.load_more_footer, this, false);
    /*
     * mLabLoadMore = (TextView) mFooterView
     * .findViewById(R.id.load_more_lab_view);
     */
    mProgressBarLoadMore = (ProgressBar) mFooterView
        .findViewById(R.id.load_more_progressBar);

    addFooterView(mFooterView);

    super.setOnScrollListener(this);
  }

  @Override
  public void setAdapter(ListAdapter adapter) {
    super.setAdapter(adapter);
  }

  /**
   * Set the listener that will receive notifications every time the list
   * scrolls.
   * 
   * @param l
   *            The scroll listener.
   */
  @Override
  public void setOnScrollListener(AbsListView.OnScrollListener l) {
    mOnScrollListener = l;
  }

  /**
   * Register a callback to be invoked when this list reaches the end (last
   * item be visible)
   * 
   * @param onLoadMoreListener
   *            The callback to run.
   */

  public void setOnLoadMoreListener(OnLoadMoreListener onLoadMoreListener) {
    mOnLoadMoreListener = onLoadMoreListener;
  }

  public void onScroll(AbsListView view, int firstVisibleItem,
      int visibleItemCount, int totalItemCount) {

    if (mOnScrollListener != null) {
      mOnScrollListener.onScroll(view, firstVisibleItem,
          visibleItemCount, totalItemCount);
    }

    if (mOnLoadMoreListener != null) {

      if (visibleItemCount == totalItemCount) {
        mProgressBarLoadMore.setVisibility(View.GONE);
        // mLabLoadMore.setVisibility(View.GONE);
        return;
      }

      boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount;

      if (!mIsLoadingMore && loadMore
          && mCurrentScrollState != SCROLL_STATE_IDLE) {
        mProgressBarLoadMore.setVisibility(View.VISIBLE);
        // mLabLoadMore.setVisibility(View.VISIBLE);
        mIsLoadingMore = true;
        onLoadMore();
      }

    }

  }

  public void onScrollStateChanged(AbsListView view, int scrollState) {
    mCurrentScrollState = scrollState;

    if (mOnScrollListener != null) {
      mOnScrollListener.onScrollStateChanged(view, scrollState);
    }

  }

  public void onLoadMore() {
    if (mOnLoadMoreListener != null) {
      mOnLoadMoreListener.onLoadMore();
    }
  }

  /**
   * Notify the loading more operation has finished
   */
  public void onLoadMoreComplete() {
    mIsLoadingMore = false;
    mProgressBarLoadMore.setVisibility(View.GONE);
  }

  /**
   * Interface definition for a callback to be invoked when list reaches the
   * last item (the user load more items in the list)
   */
  public interface OnLoadMoreListener {
    /**
     * Called when the list reaches the last item (the last item is visible
     * to the user)
     */
    public void onLoadMore();
  }

}




Java Source Code List

com.custom.widget.LoadMoreListView.java
com.custom.widget.PullAndLoadListView.java
com.custom.widget.PullToRefreshListView.java