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();
}
}