我有一个对话 fragment ,中间有一个简单的不确定进度条,我用它来显示网络 Activity :
public class NativeLoadingDialogFragment extends DialogFragment {
public NativeLoadingDialogFragment() {
// Blank
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
Dialog dialog = new Dialog(getActivity(), android.R.style.Theme_Dialog);
ProgressBar indeterminateProgressBar = new ProgressBar(getActivity());
indeterminateProgressBar.setIndeterminate(true);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(false);
dialog.setCanceledOnTouchOutside(false);
dialog.setContentView(indeterminateProgressBar);
dialog.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
return dialog;
}
public boolean isShowing() {
return getDialog() != null;
}
}
我在整个应用程序中都使用了对话框 fragment ,没有任何问题,当我调用 dialog.show(getFragmentManager, null)
时,它在很多地方都没有问题,但是当我尝试调用它在我的设置 Activity 的 onResume 中没有显示!
我有一个设置 Activity ,它启动系统设置以更改手机的语言。一旦用户更改语言并且我的 Activity 恢复,我会检测语言是否已更改并进行网络调用:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mLoading = new NativeLoadingDialogFragment();
if (savedInstanceState != null) {
if (savedInstanceState.containsKey(EXTRA_LANGUAGE)) {
String language = savedInstanceState.getString(EXTRA_LANGUAGE);
String currentLanguage = AppUtils.getDefaultLanguageCode(
SmartBankConstant.DEFAULT_LANGUAGE,
SmartBankConstant.SUPPORTED_LANGUAGES);
if (!language.equals(currentLanguage)) {
updateLanguage(Language.stringToLanguage(currentLanguage));
}
}
}
}
private void updateLanguage(Language newLanguage) {
....
getSpiceManager().execute(new SetLanguageRequest(newLanguage),
new SetLanguageRequestListener(this));
mLoading.show(getFragmentManager(), null);
getFragmentManager().executePendingTransactions();
}
代码确实运行但没有对话框出现!如果网络调用失败,我有一个重试选项,可以再次调用 updateLanguage(Language newLanguage)
方法,此时对话框实际上会出现!我做错了什么?
最佳答案
试试这个方法。它检查对话框是否已经显示,否则显示它。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
...
mLoading = new NativeLoadingDialogFragment();
if (savedInstanceState != null) {
...
}
mLoading.show(getFragmentManager(), null);
}
private void updateLanguage(Language newLanguage) {
...
if (mLoading != null && !mLoading.isVisible()) {
mLoading.show(getFragmentManager(), null);
getFragmentManager().executePendingTransactions();
}
}
关于在 Activity 的 onCreate 中调用 show() 时,Android DialogFragment 不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22616397/