package com.krislq.cache.widget; import android.content.Context; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.LinearLayout; import android.widget.ListView; import com.krislq.cache.R; import com.krislq.cache.util.L; public class ScrollToFootRefreshListView extends ListView implements OnScrollListener{ protected Context mContext; private View mFooterView; private OnRefreshListener mRefreshListener; private boolean isRefreshing = false; private LinearLayout layoutFooter; public ScrollToFootRefreshListView(Context context) { super(context); init(context); } public ScrollToFootRefreshListView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } public ScrollToFootRefreshListView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } private void init(Context context) { mFooterView = LayoutInflater.from(context).inflate(R.layout.scroll_to_refresh_footer, this, false); addFooterView(mFooterView, null, false); //mFooterView.setVisibility(View.INVISIBLE); layoutFooter = (LinearLayout) mFooterView.findViewById(R.id.scroll_to_refresh_footer); layoutFooter.setVisibility(View.GONE); setOnScrollListener(this); } public void setOnRefreshListner(ScrollToFootRefreshListView.OnRefreshListener onRefreshListener) { this.mRefreshListener = onRefreshListener; } /** * call this method when refresh completed */ public void onRefreshCompleted() { isRefreshing = false; layoutFooter.setVisibility(View.GONE); } /** * check whether it is refreshing * @return */ public boolean isRefreshing() { return isRefreshing; } public void hideLineInFooter() { View line = mFooterView.findViewById(R.id.line); line.setVisibility(View.GONE); } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { // TODO Auto-generated method stub } @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (scrollState == OnScrollListener.SCROLL_STATE_FLING || scrollState == OnScrollListener.SCROLL_STATE_IDLE) { if (view.getLastVisiblePosition() == view.getCount() - 1) { if(mRefreshListener != null && !isRefreshing) { layoutFooter.setVisibility(View.VISIBLE); isRefreshing = true; L.i("isrefreshing-->" + isRefreshing); mRefreshListener.onRefresh(); } } } } /** * * @author Oscar * */ public interface OnRefreshListener { public void onRefresh(); } }