gpt4 book ai didi

android - 防止 Dialog(或 DialogFragment)在应用进入后台时关闭

转载 作者:塔克拉玛干 更新时间:2023-11-02 18:58:07 27 4
gpt4 key购买 nike

我的应用向用户显示进度或 AlertDialog 是很常见的。如果用户将应用程序置于后台然后稍后返回,我希望 Dialog 仍然显示。有没有办法让 Android 处理这个问题?我希望它不关闭对话框,或者在 Activity 恢复时自动重新打开它。

到目前为止,它看起来像没有。我还没有找到大量关于此的结果(大多数人遇到方向改变的问题,我的应用程序不允许)但很少有人询问进入后台。我已经尝试了 DialogFragment 和常规 Dialog 的所有排列,但是当按下主页按钮并从任务管理器打开应用程序时,它们都会消失。

我什至没有任何代码可以展示,因为它都处于在线各种示例的测试阶段。我怀疑我必须自己管理它,方法是检查 onResume() 是否应该显示某些内容。如果是这种情况,我可以接受,但我想确定。

最佳答案

首先让我们清除一些东西,就像您在下一张图片中看到的那样,您的 Activity 或 fragment 可能由于多种原因而被破坏,因此您必须处理您想要保存“对话状态”的内容。

activity life cycle enter image description here

现在是代码:

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);
}
}
}

关于android - 防止 Dialog(或 DialogFragment)在应用进入后台时关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29930864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com