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/**网络异常*/ } }