Mar*_*her 8 android android-dialog android-dialogfragment
我的应用程序显示进度或AlertDialog用户非常常见.如果用户将应用程序放入后台然后稍后返回,我希望Dialog仍然显示该应用程序.有没有办法让Android处理这个?我想它要么不关闭对话框,要么在Activity恢复时自动重新打开它.
到目前为止它看起来像没有.我没有找到大量关于此的结果(大多数人遇到方向更改的问题,我的应用程序不允许),但很少有人询问进入后台.我已经尝试了DialogFragment常规的每个排列Dialog,但是当按下主页按钮并且从任务管理器打开应用程序时,它们都会消失.
我甚至没有任何代码可以展示,因为它们都处于在线各种示例的测试阶段.我怀疑我必须自己管理这个,通过签入onResume()是否应该显示的东西.如果是这种情况我可以忍受它,但我想知道肯定.
首先让我们清除一些内容,就像您在下图中看到的那样,您的活动或片段可能会因多种原因而被破坏,因此您必须处理您想要保存“对话框状态”的内容。

现在的代码:
public class CustomProgressDialog extends Dialog {
private static final String SHOWING_PROGRESS_DIALOG = "showing_progress_dialog";
private static final String STRING_PROGRESS_DIALOG = "string_progress_dialog";
private static final String SHOWING_POP_UP_DIALOG = "showing_pop_up_dialog";
private static final String STRING_POP_UP_DIALOG = "string_pop_up_dialog";
public TextView textView;
public CustomProgressDialog(Context context) {
super(context, android.R.style.Theme_Translucent_NoTitleBar);
setContentView(R.layout.progress_layout);
setCancelable(false);
textView = (TextView) findViewById(R.id.progress_textView);
}
}
public class MasterActivity extends FragmentActivity {
private CustomProgressDialog progressDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_master);
progressDialog = new CustomProgressDialog(this);
if (savedInstanceState != null) {
boolean showingDialog = savedInstanceState.getBoolean(SHOWING_PROGRESS_DIALOG);
if (showingDialog) {
String msg = savedInstanceState.getString(STRING_PROGRESS_DIALOG, getResources().getString(R.string.progress_default_text));
progressDialog.textView.setText(msg);
progressDialog.show();
}
boolean mShowing_PopUpdialog = savedInstanceState.getBoolean(SHOWING_POP_UP_DIALOG);
String temp_msg = savedInstanceState.getString(STRING_POP_UP_DIALOG, "");
if (mShowing_PopUpdialog)
showPopUpDialog(temp_msg);
}
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (progressDialog.isShowing()) {
outState.putBoolean(SHOWING_PROGRESS_DIALOG, true);
outState.putString(STRING_PROGRESS_DIALOG, progressDialog.textView.getText().toString());
}
if (alert != null && alert.isShowing()) {
outState.putBoolean(SHOWING_POP_UP_DIALOG, true);
outState.putString(STRING_POP_UP_DIALOG, mString_dialog);
}
}
}
Run Code Online (Sandbox Code Playgroud)