我想要一些这样的行为:
当我向服务器发出请求时,会出现进度对话框。当我收到回复或用户取消呼叫时(通过按Home或Back按钮),对话框消失。
我目前正在使用Retrofit进行网络制作,并制作了一些易于使用的包装类。
首先,我使用回调来解除对话,如下所示:
call.enqueue(new Callback<ResponseVO>() {
@Override
public void onFailure(Call<ResponseVO> call, Throwable t) {
t.printStackTrace();
if (loadingDialog != null && loadingDialog.isVisible()) {
loadingDialog.dismissAllowingStateLoss();
}
}
}
它适用于Back键,但在主页按钮时没有帮助我。所以我决定在我的DialogFragment中处理它。
在onStop()方法中,我取消了Retrofit调用。
@Override
public void onStop() {
super.onStop();
call.cancel();
Log.d("NetworkProgressDialog", "onStop called");
}
在onStart()方法中,我检查是否取消了调用并关闭了对话框。
@Override
public void onStart() {
super.onStart();
if (call == null || call.isCanceled()) {
Log.d("NetworkProgressDialog", "call is canceled. dismiss dialog.");
dismiss();
}
Log.d("NetworkProgressDialog", "onStart called");
}
这似乎有效,但是如果我按Home并再次重新打开应用程序,Logcat会说“onStart called”并且没有显示对话框。当我在那之后按Back时,会调用onStop()。
所以我只是想知道我是否可以在onStart()或onPause()中关闭我的对话框。如果不可能,我该如何实现?任何帮助将不胜感激!