package licola.demo.com.huabandemo.Widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewStub;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import licola.demo.com.huabandemo.R;
/**
* Created by cundong on 2015/10/9.
* <p/>
* ListView/GridView/RecyclerView 分页加载时使用到的FooterView
*/
public class LoadingFooter extends RelativeLayout {
protected State mState = State.Normal;
private View mLoadingView;
private View mNetworkErrorView;
private View mTheEndView;
private ProgressBar mLoadingProgress;
private TextView mLoadingText;
public LoadingFooter(Context context) {
this(context,null);
}
public LoadingFooter(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public LoadingFooter(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
}
public void init(Context context) {
inflate(context, R.layout.view_list_footer, this);
setOnClickListener(null);
setState(State.Normal, true);
}
public State getState() {
return mState;
}
public void setState(State status) {
setState(status, true);
}
/**
* 设置状态
*
* @param status
* @param showView 是否展示当前View
*/
public void setState(State status, boolean showView) {
if (mState == status) {
return;//如果状态已经相同 不做修改
}
mState = status;
switch (status) {
case Normal:
setOnClickListener(null);
if (mLoadingView != null) {
mLoadingView.setVisibility(GONE);
}
if (mTheEndView != null) {
mTheEndView.setVisibility(GONE);
}
if (mNetworkErrorView != null) {
mNetworkErrorView.setVisibility(GONE);
}
break;
case Loading:
setOnClickListener(null);
if (mTheEndView != null) {
mTheEndView.setVisibility(GONE);
}
if (mNetworkErrorView != null) {
mNetworkErrorView.setVisibility(GONE);
}
if (mLoadingView == null) {
ViewStub viewStub = (ViewStub) findViewById(R.id.loading_viewstub);
mLoadingView = viewStub.inflate();
mLoadingProgress = (ProgressBar) mLoadingView.findViewById(R.id.loading_progress);
mLoadingText = (TextView) mLoadingView.findViewById(R.id.loading_text);
} else {
mLoadingView.setVisibility(VISIBLE);
}
mLoadingView.setVisibility(showView ? VISIBLE : GONE);
mLoadingProgress.setVisibility(View.VISIBLE);
// mLoadingText.setText(R.string.list_footer_loading);
break;
case TheEnd:
setOnClickListener(null);
if (mLoadingView != null) {
mLoadingView.setVisibility(GONE);
}
if (mNetworkErrorView != null) {
mNetworkErrorView.setVisibility(GONE);
}
if (mTheEndView == null) {
ViewStub viewStub = (ViewStub) findViewById(R.id.end_viewstub);
mTheEndView = viewStub.inflate();
} else {
mTheEndView.setVisibility(VISIBLE);
}
mTheEndView.setVisibility(showView ? VISIBLE : GONE);
break;
case NetWorkError:
if (mLoadingView != null) {
mLoadingView.setVisibility(GONE);
}
if (mTheEndView != null) {
mTheEndView.setVisibility(GONE);
}
if (mNetworkErrorView == null) {
ViewStub viewStub = (ViewStub) findViewById(R.id.network_error_viewstub);
mNetworkErrorView = viewStub.inflate();
} else {
mNetworkErrorView.setVisibility(VISIBLE);
}
mNetworkErrorView.setVisibility(showView ? VISIBLE : GONE);
break;
default:
break;
}
}
public enum State {
Normal/**正常*/
, TheEnd/**加载到最底了*/
, Loading/**加载中..*/
, NetWorkError/**网络异常*/
}
}