我是直接把dialog顯示放在onSubscribe中,然后在onComplete或onError隱藏.但是我這樣寫不管哪一個界面dialog界面都是占滿全屏,如何能夠只讓它顯示在某個指定區(qū)域,如圖是一個主界面,下面是四個切換按鈕,想把dialog顯示在紅色區(qū)域內.
public abstract class HttpCallback<T> implements Observer<BaseResponse<T>> {
public static final String TAG = HttpCallback.class.getCanonicalName();
private WeakReference<Activity> mActivity;
private boolean mShow;
private boolean mCancelable = false;
private boolean hasError = true;
private AlertDialog mDialog;
public HttpCallback(Activity activity) {
mActivity = new WeakReference<>(activity);
}
@Override
public void onSubscribe(Disposable d) {
if (mShow) {
showDialog();//默認不顯示進度,需要顯示重寫onSubscribe方法,并showProgress為true
Log.d(TAG, "onSubscribe: 1103顯示進度圈");
}else{
Log.d(TAG, "onSubscribe: 1103不顯示進度圈");
}
}
@Override
public void onNext(BaseResponse<T> t) {
int code = t.getCode(); // 0 失敗, 1 成功 , -1 token過期跳轉到登錄界面
// int code=-1;
if (code == RequestUrl.CODE_SUCCESS) {
hasError = false;
onSuccess(t.getData(), t.getMsg());
} else if (code == RequestUrl.CODE_TOKEN_EXPIRE) {
toLogin();//token失效,跳轉到登錄界面
} else {
ToastUtils.showMessage(t.getMsg());
onFailure();
}
}
@Override
public void onError(Throwable e) {
if (mDialog != null)
mDialog.dismiss();
if (e instanceof SocketTimeoutException) {
// 連接超時
onError(e, ErrorStatus.HTTP_TIMEOUT);
} else if (e instanceof ConnectException || e instanceof UnknownHostException) {
// 無網(wǎng)絡
onError(e, ErrorStatus.HTTP_UNCONNECTED);
} else if (e instanceof HttpException) {
// 網(wǎng)絡異常
// onError(e, ErrorStatus.HTTP_EXCEPTION.setErrorCode(((HttpException) e).code()));
onError(e, ErrorStatus.HTTP_EXCEPTION);
} else if (e instanceof JsonSyntaxException || e instanceof JSONException) {
// 數(shù)據(jù)異常
onError(e, ErrorStatus.DATA_EXCEPTION);
} else {
// 其他錯誤
onError(e, ErrorStatus.OTHER_EXCEPTION);
}
onFinish(hasError);
}
private void onError(Throwable e, final ErrorStatus otherException) {
if (e != null) {
e.printStackTrace();
}
mActivity.get().runOnUiThread(new Runnable() {
@Override
public void run() {
ToastUtils.showMessage(otherException.getErrorMessage(), Toast.LENGTH_SHORT);
}
});
}
@Override
public void onComplete() {
if (mDialog != null)
mDialog.dismiss();
onFinish(hasError);
}
public abstract void onSuccess(T t, String msg);
//除了成功與token失效的情況走這里
public void onFailure() {
}
//token失效
public void onTokenExpired() {
}
public void onFinish(boolean hasError) {
}
protected void showProgress(boolean show) {
mShow = show;
}
public void setCancelable(boolean cancelable) {
mCancelable = cancelable;
}
private void showDialog() {
mDialog = new AlertDialog.Builder(mActivity.get()).create();
mDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mDialog.setCancelable(false);
mDialog.show();
Window window = mDialog.getWindow();
window.getDecorView().setPadding(0, 0, 0, 0);
window.setGravity(Gravity.CENTER);
window.setContentView(R.layout.loading);
WindowManager.LayoutParams lp = window.getAttributes();
lp.width = WindowManager.LayoutParams.FILL_PARENT;
lp.height = WindowManager.LayoutParams.FILL_PARENT;
window.setAttributes(lp);
}
private void toLogin() {
// ToastUtils.showLongMessage("登錄狀態(tài)已過期,請重新登錄");
AlertDialog.Builder builder = new AlertDialog.Builder(mActivity.get());
builder.setTitle("溫馨提示")
.setMessage("登錄狀態(tài)已過期,請重新登錄")
.setCancelable(false)
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
UserManager.getInstance().logout();//清除保存數(shù)據(jù)
Intent loginIntent = new Intent(mActivity.get(), ThirdLoginActivity.class);//token失效,跳轉到登錄界面
loginIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// loginIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
mActivity.get().startActivity(loginIntent);
}
}).show();
}
}北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學校辦產(chǎn)業(yè)為響應國家深化產(chǎn)教融合/校企合作的政策,積極推進“中國制造2025”,實現(xiàn)中華民族偉大復興的升級產(chǎn)業(yè)鏈。利用北京大學優(yōu)質教育資源及背
博為峰,中國職業(yè)人才培訓領域的先行者
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。