package com.dreamspace.uucampus.widget;
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.RelativeLayout;
import com.baoyz.swipemenulistview.SwipeMenuListView;
import com.dreamspace.uucampus.R;
/**
* Created by Lx on 2015/11/3.
*/
public class SwipeMenuLoadMoreListView extends SwipeMenuListView implements AbsListView.OnScrollListener {
private static final String TAG =com.dreamspace.uucampus.widget.LoadMoreListView.class
.getSimpleName();
private OnScrollListener mOnScrollListener;
private LayoutInflater mInflater;
private View mFooterView;
private View mLoadMoreStatusView;
private OnLoadMoreListener mOnLoadMoreListener;
private boolean mIsLoadingMore = false;
private int mCurrentScrollState;
public SwipeMenuLoadMoreListView(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
public SwipeMenuLoadMoreListView(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);
mFooterView = (RelativeLayout) mInflater.inflate(R.layout.load_more_footer,
this, false);
mLoadMoreStatusView = mFooterView.findViewById(R.id.load_more_progress_bar);
addFooterView(mFooterView);
setLoading(false);
super.setOnScrollListener(this);
}
public void setLoadMoreStatusView(View v, int statusViewId) {
removeFooterView(mFooterView);
mFooterView = v;
mLoadMoreStatusView = mFooterView.findViewById(statusViewId);
addFooterView(mFooterView);
}
public void setLoadMoreStatusView(View v) {
removeFooterView(mFooterView);
mFooterView = v;
mLoadMoreStatusView = mFooterView.findViewById(R.id.load_more_progress_bar);
addFooterView(mFooterView);
}
/**
* Set the listener that will receive notifications every time the list
* scrolls.
*
* @param l The scroll listener.
*/
@Override
public void setOnScrollListener(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 (visibleItemCount == totalItemCount) {
if (mLoadMoreStatusView != null) {
mLoadMoreStatusView.setVisibility(View.GONE);
}
return;
}
if (mOnLoadMoreListener != null) {
boolean loadMore = firstVisibleItem + visibleItemCount >= totalItemCount - 1;
if (!mIsLoadingMore && loadMore
&& mCurrentScrollState != SCROLL_STATE_IDLE) {
setLoading(true);
onLoadMore();
}
}
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
mCurrentScrollState = scrollState;
if (mOnScrollListener != null) {
mOnScrollListener.onScrollStateChanged(view, scrollState);
}
}
public void setLoading(boolean loading) {
Log.d(TAG, "setLoading: " + loading);
mIsLoadingMore = loading;
mLoadMoreStatusView.setVisibility(loading ? View.VISIBLE : View.GONE);
}
public void onLoadMore() {
Log.d(TAG, "onLoadMore");
if (mOnLoadMoreListener != null) {
mOnLoadMoreListener.onLoadMore();
}
}
public void onLoadMoreComplete() {
setLoading(false);
}
public interface OnLoadMoreListener {
public void onLoadMore();
}
}