我的应用向用户显示进度或AlertDialog
非常常见。如果用户将应用程序放入后台然后稍后返回,我希望仍然显示Dialog
。有没有办法让Android处理这个?我希望它不要关闭对话框,或者当Activity
恢复时它会自动重新打开它。
到目前为止看起来没有。我没有找到大量关于此的结果(大多数人遇到方向更改的问题,我的应用程序不允许)但很少有人询问进入后台。我已经尝试了DialogFragment
和常规Dialog
的每个排列,但是当按下主页按钮并从任务管理器打开应用程序时,它们都会消失。
我甚至没有任何代码可以显示,因为它们都处于在线各种示例的测试阶段。我怀疑如果要显示某些内容,我必须通过检查onResume(
)来自行管理。如果是这种情况,我可以忍受它,但我想肯定地知道。
答案 0 :(得分:3)
首先让你清楚一些东西,就像你在下一张图片中看到的那样,你的活动或片段可能会因为很多原因而被破坏,所以你必须处理你想要保存的东西"你的对话状态"点。
现在代码:
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);
}
}
}
答案 1 :(得分:0)
在DialogFragment
onPause()
执行此操作
@Override
public void onPause() {
super.onPause();
getActivity().getSupportFragmentManager().beginTransaction()
.addToBackStack("mydialogfragment").commit();
Log.v("dialog", "dialog is going down");
}
然后在Activity
onResume()
中,您致电DialogFragment
恢复生机
@Override
protected void onResume() {
super.onResume();
getSupportFragmentManager().popBackStack();
Log.v("activity", "onresume called - i am bringing back the dialog");
}
为什么我认为这可行有效DialogFragment
是Fragment
,Fragment
的生命周期由父Activity
控制为用户@ 0mach0图表显示,所以你要做的就是推它做后台堆栈并回拨它。所以它应该工作