Android之LoadMoreListView

来源:互联网 发布:2017观潮网络空间论坛 编辑:程序博客网 时间:2024/06/14 04:06
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
/** * Android load more ListView when scroll down. *  * @author Charon Chui */public class LoadMoreListView extends ListView {protected static final String TAG = "LoadMoreListView";private View mFooterView;private OnScrollListener mOnScrollListener;private OnLoadMoreListener mOnLoadMoreListener;/** * If is loading now. */private boolean mIsLoading;private int mCurrentScrollState;public LoadMoreListView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init(context);}public LoadMoreListView(Context context, AttributeSet attrs) {super(context, attrs);init(context);}public LoadMoreListView(Context context) {super(context);init(context);}private void init(Context context) {mFooterView = View.inflate(context, R.layout.load_more_footer, null);addFooterView(mFooterView);hideFooterView();/* * Must use super.setOnScrollListener() here to avoid override when call * this view's setOnScrollListener method */super.setOnScrollListener(superOnScrollListener);}/** * Hide the load more view(footer view) */private void hideFooterView() {mFooterView.setVisibility(View.GONE);}/** * Show load more view */private void showFooterView() {mFooterView.setVisibility(View.VISIBLE);}@Overridepublic void setOnScrollListener(OnScrollListener l) {mOnScrollListener = l;}/** * Set load more listener, usually you should get more data here. *  * @param listener *            OnLoadMoreListener * @see OnLoadMoreListener */public void setOnLoadMoreListener(OnLoadMoreListener listener) {mOnLoadMoreListener = listener;}/** * When complete load more data, you must use this method to hide the footer * view, if not the footer view will be shown all the time. */public void onLoadMoreComplete() {mIsLoading = false;hideFooterView();}private OnScrollListener superOnScrollListener = new OnScrollListener() {@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {mCurrentScrollState = scrollState;// Avoid override when use setOnScrollListenerif (mOnScrollListener != null) {mOnScrollListener.onScrollStateChanged(view, scrollState);}}@Overridepublic void onScroll(AbsListView view, int firstVisibleItem,int visibleItemCount, int totalItemCount) {if (mOnScrollListener != null) {mOnScrollListener.onScroll(view, firstVisibleItem,visibleItemCount, totalItemCount);}// The count of footer view will be add to visibleItemCount also are// added to totalItemCountif (visibleItemCount == totalItemCount) {// If all the item can not fill screen, we should make the// footer view invisible.hideFooterView();} else if (!mIsLoading&& (firstVisibleItem + visibleItemCount >= totalItemCount)&& mCurrentScrollState != SCROLL_STATE_IDLE) {showFooterView();mIsLoading = true;if (mOnLoadMoreListener != null) {mOnLoadMoreListener.onLoadMore();}}}};/** * Interface for load more */public interface OnLoadMoreListener {/** * Load more data. */void onLoadMore();}`

load_more_footer.xml

12345678910111213141516171819202122232425
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:gravity="center"    android:orientation="horizontal" >    <ProgressBar        android:id="@+id/load_more_pb"        style="@android:style/Widget.ProgressBar.Small"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_marginRight="10dp" />    <TextView        android:id="@+id/load_more_tv"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:paddingBottom="5dp"        android:paddingTop="5dp"        android:text="正在加载..."        tools:ignore="HardcodedText" /></LinearLayout>

调用

1234567
mListView.setOnLoadMoreListener(new OnLoadMoreListener() {@Overridepublic void onLoadMore() {}});
0 0
原创粉丝点击