天天看點

android-封裝一個加載處理的handler類

public class LoadHandler extends Handler {
    private LoadListener listener;

    public LoadHandler(Looper looper) {
        super(looper);
    }

    public LoadHandler(LoadListener listener) {
        this.listener = listener;
    }
    public LoadHandler(Looper looper,LoadListener listener) {
        super(looper);
        this.listener = listener;
    }
    public LoadHandler() {
    }

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        Bundle bundle = msg.getData();
        switch (msg.what) {
        case Constants.LOAD_START:// 開始加載
            if (listener != null) {
                listener.onStart();
            }
            break;
        case Constants.LOAD_SUCCESS:// 加載成功
            if (listener != null) {
                Object result = null;
                if(bundle!=null){
                    result = bundle.get("result");
                }
                listener.onSuccess(result);
            }
            break;
        case Constants.LOAD_FAIL:// 加載失敗
            if (listener != null) {
                Object result = null;
                if(bundle!=null){
                    result = bundle.get("result");
                }
                listener.onFail();
                listener.onFail(result);
            }
            break;
        case Constants.LOAD_Littile_DATA:// 資料量少
            if (listener != null) {
                Object result = null;
                if(bundle!=null){
                    result = bundle.get("result");
                }
                listener.onLittleData(result);
            }
            break;
        case Constants.LOAD_HALF:// 加載一半
            if (listener != null) {
                Object result = null;
                if(bundle!=null){
                    result = bundle.get("result");
                }
                listener.onHalfLoad(result);
            }
            break;

        default:
            break;
        }
    }
}
           
/**
 * 一個抽象的加載監聽接口
 * @author xiaoqian.hu
 *
 */
public interface LoadListener {
    void onStart();
    void onLoading();
    void onFail();
    void onFail(Object result);
    void onSuccess(Object result);
    /**
     * 資料沒有加載完成,但是足夠程式使用時的回調
     * @param result
     */
    void onHalfLoad(Object result);
    void onLittleData(Object result);
}
           
public class LoadListenerImpl implements LoadListener {
    private Context context;
    private Dialog mProgressDialog;

    public LoadListenerImpl() {
    }

    public LoadListenerImpl(Context context) {
        this.context = context;
        if (context != null) {
            initProgressDialog(null);
        }
    }

    public LoadListenerImpl(Context context, String Message) {
        this.context = context;
        if (context != null) {
            initProgressDialog(Message);
        }
    }

    @Override
    public void onFail() {
        dimiss();
    }

    @Override
    public void onFail(Object result) {
        dimiss();
    }

    @Override
    public void onStart() {
        show();
    }

    @Override
    public void onLoading() {

    }

    private void dimiss() {
        try {
            if (null != mProgressDialog && mProgressDialog.isShowing()) {
                mProgressDialog.dismiss();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void show() {
        if (null != mProgressDialog && !mProgressDialog.isShowing()) {
            mProgressDialog.show();
            mProgressDialog.setContentView(R.layout.custom_progress_dlg);
        }
    }

    private void initProgressDialog(String msg) {
        if (null == this.mProgressDialog) {
            // HHL modified @0819 to optimize loading effect
            ProgressDialog progressDialog = new ProgressDialog(context);
            progressDialog.setCanceledOnTouchOutside(false);
            progressDialog.setCancelable(false);
            this.mProgressDialog = progressDialog;
        }
    }

    @Override
    public void onSuccess(Object result) {
        dimiss();
    }

    @Override
    public void onHalfLoad(Object result) {
        dimiss();
    }

    @Override
    public void onLittleData(Object result) {
        dimiss();
    }

}
           

繼續閱讀