package com.todayinfo.ui.component; import android.content.Context; import android.graphics.drawable.AnimationDrawable; import android.util.AttributeSet; import android.view.View; import android.widget.ImageView; import android.widget.RelativeLayout; import com.jinghua.todayinformation.R; import com.todayinfo.ui.api.IStrategy; /** * * @author longtao.li * */ public class ErrorHintView extends RelativeLayout { RelativeLayout mContainer; LayoutParams layoutParams; /** * 动画 */ private AnimationDrawable animationDrawable; private ErrorHandler mErrorHandler = new ErrorHandler(); public interface OperateListener { void operate(); } private OperateListener mOperateListener; public ErrorHintView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public ErrorHintView(Context context) { super(context); init(); } private void init() { View.inflate(getContext(), R.layout.custom_error_hint_view, this); mContainer = (RelativeLayout) findViewById(R.id.container); layoutParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); } public void show() { setVisibility(View.VISIBLE); } public void close() { setVisibility(View.GONE); } /** * 锦囊 用于实施策略,处理订单状态 * * @author longtao.li * */ class ErrorHandler { public ErrorHandler() { } public void operate(IStrategy strategy) { show(); strategy.operate(); } } /** * 显示加载失败UI */ public void loadFailure(OperateListener Listener) { this.mOperateListener = Listener; mErrorHandler.operate(new LoadFailure()); } View loadFailure; /** * 加载失败 * * @author longtao.li * */ class LoadFailure implements IStrategy { @Override public void operate() { if (loadFailure == null) { loadFailure = View.inflate(getContext(), R.layout.layout_load_failure, null); View view = loadFailure.findViewById(R.id.load_retry); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { mOperateListener.operate(); } }); } mContainer.removeAllViews(); mContainer.addView(loadFailure, layoutParams); } } /** * 显示无网络 */ public void netError(OperateListener Listener) { this.mOperateListener = Listener; mErrorHandler.operate(new NetWorkError()); } View netError; /** * 无网络 * * @author longtao.li * */ class NetWorkError implements IStrategy { @Override public void operate() { if (netError == null) { netError = View.inflate(getContext(), R.layout.layout_load_wifi_failure, null); View view = netError.findViewById(R.id.wifi_retry); view.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { mOperateListener.operate(); } }); } mContainer.removeAllViews(); mContainer.addView(netError, layoutParams); } } /** * 显示无数据 */ public void noData() { mErrorHandler.operate(new NoDataError()); } View noData; /** * 无数据 * * @author longtao.li * */ class NoDataError implements IStrategy { @Override public void operate() { if (noData == null) { noData = View.inflate(getContext(), R.layout.layout_load_noorder, null); } mContainer.removeAllViews(); mContainer.addView(noData, layoutParams); } } View loadingdata; /** * 转菊花 * * @author 荣 */ class LoadingData implements IStrategy { @Override public void operate() { if (loadingdata == null) { loadingdata = View.inflate(getContext(), R.layout.layout_load_loading, null); } ImageView iv = (ImageView) loadingdata .findViewById(R.id.loading_iv); mContainer.removeAllViews(); mContainer.addView(loadingdata, layoutParams); showLoading(iv); } } /** * 转菊花 * * @param Listener */ public void loadingData() { mErrorHandler.operate(new LoadingData()); } /** * 显示动画loading */ public void showLoading(final ImageView iv) { animationDrawable = (AnimationDrawable) iv.getBackground(); animationDrawable.start(); } /** * 隐藏动画loading */ public void hideLoading() { if (animationDrawable != null && animationDrawable.isRunning()) { animationDrawable.stop(); } close(); } }