package com.michael.doubanonline.component;
import android.content.Context;
import android.text.format.DateUtils;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.handmark.pulltorefresh.library.PullToRefreshBase;
import com.handmark.pulltorefresh.library.PullToRefreshListView;
import com.michael.doubanonline.R;
/**
* 让下来刷新支持底部的Footer
*
* @author Michael
* @version create time:2013-3-24 下午5:52:52
*/
public class PullToRefreshListViewWithFooter extends PullToRefreshListView
{
public PullToRefreshListViewWithFooter(Context context)
{
super(context);
init(context);
}
public PullToRefreshListViewWithFooter(Context context, AttributeSet attrs)
{
super(context, attrs);
init(context);
}
public PullToRefreshListViewWithFooter(Context context, Mode mode)
{
super(context, mode);
init(context);
}
public PullToRefreshListViewWithFooter(Context context, Mode mode, AnimationStyle style)
{
super(context, mode, style);
init(context);
}
private View footerView;
private void init(final Context context)
{
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
footerView = (View) inflater.inflate(R.layout.list_footer_laod_more, this.getRefreshableView(), false);
this.getRefreshableView().addFooterView(footerView);
// 添加ListView下拉刷新的回调
this.setOnRefreshListener(new OnRefreshListener<ListView>()
{
@Override
public void onRefresh(PullToRefreshBase<ListView> refreshView)
{
String label = DateUtils.formatDateTime(context, System.currentTimeMillis(), DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_ABBREV_ALL);
// 更新Head
refreshView.getLoadingLayoutProxy().setLastUpdatedLabel(label);
if (mOnFooterListViewRefreshListener != null)
{
mOnFooterListViewRefreshListener.onFooterListViewRefresh();
}
}
});
// 添加对ListView被拉到最底下
this.setOnLastItemVisibleListener(new OnLastItemVisibleListener()
{
@Override
public void onLastItemVisible()
{
if (mOnFooterListViewLastItemVisibleListener != null)
{
mOnFooterListViewLastItemVisibleListener.onFooterListViewLastItemVisible();
}
}
});
}
/**
* 设置FootView的可见性
* */
public void setFooterViewVisibility(int visiablity)
{
footerView.setVisibility(visiablity);
}
/** ListView footer的状态为加载完毕 */
public static final int LOADING_STATE_DONE = 0;
/** ListView footer的状态为加载更多 */
public static final int LOADING_STATE_LOADING = 1;
/** ListView footer的状态为加载失败 */
public static final int LOADING_STATE_FAIL = 2;
/**
* 设置ListView的footer,显示正在加载更多 有两种状态: LOADING_STATE_DONE
* 表示加载完成,左边的ProgressBar不显示,右边默认显示"加载完毕" LOADING_STATE_HAS_MORE
* 表示正在加载,左边显示ProgressBar,右边默认显示"加载中..."
*
* @param loadingState
* 指定ListView的Footer的状态
*
* */
public void setListViewFooterContent(int loadingState)
{
setListViewFooterContent(loadingState, null);
}
/**
* 设置ListView的footer,显示正在加载更多 有两种状态: LOADING_STATE_DONE
* 表示加载完成,左边的ProgressBar不显示,右边默认显示"加载完毕" LOADING_STATE_HAS_MORE
* 表示正在加载,左边显示ProgressBar,右边默认显示"加载中..."
*
* @param loadingState
* 指定ListView的Footer的状态
* @param showTip
* 显示自定义的内容
*/
public void setListViewFooterContent(int loadingState, String customTip)
{
if (footerView == null)
{
return;
} else
{
if (loadingState != LOADING_STATE_DONE && loadingState != LOADING_STATE_LOADING && loadingState != LOADING_STATE_FAIL)
{
throw new IllegalArgumentException("the param can not be:" + loadingState);
}
// RelativeLayout llFooter =
// (RelativeLayout)footerView.findViewById(R.id.rl_footer);
// llFooter.setVisibility(View.VISIBLE);//因为默认在布局文件中是不可见的,这样在刚开始加载的时候(即ListView中没有数据的时候)就不会显示了
ProgressBar pbLoading = (ProgressBar) footerView.findViewById(R.id.pb_loading);
TextView tvFooter = (TextView) footerView.findViewById(R.id.tv_loading);
switch (loadingState)
{
case LOADING_STATE_DONE:
pbLoading.setVisibility(View.GONE);
if (customTip == null)
{
customTip = "加载完毕";
}
break;
case LOADING_STATE_LOADING:
pbLoading.setVisibility(View.VISIBLE);
if (customTip == null)
{
customTip = "正在加载...";
}
break;
case LOADING_STATE_FAIL:
pbLoading.setVisibility(View.GONE);
if (customTip == null)
{
customTip = "加载失败,请重试";
}
break;
default:
break;
}
tvFooter.setText(new StringBuilder(customTip));
}
}
private OnFooterListViewRefreshListener mOnFooterListViewRefreshListener;
public interface OnFooterListViewRefreshListener
{
public void onFooterListViewRefresh();
}
public void setOnFooterListViewRefreshListener(OnFooterListViewRefreshListener mOnFooterListViewRefreshListener)
{
this.mOnFooterListViewRefreshListener = mOnFooterListViewRefreshListener;
}
private OnFooterListViewLastItemVisibleListener mOnFooterListViewLastItemVisibleListener;
public interface OnFooterListViewLastItemVisibleListener
{
public void onFooterListViewLastItemVisible();
}
public void setOnFooterListViewLastItemVisibleListener(OnFooterListViewLastItemVisibleListener mOnFooterListViewLastItemVisibleListener)
{
this.mOnFooterListViewLastItemVisibleListener = mOnFooterListViewLastItemVisibleListener;
}
}