我想用我在运行时构建的字符串创建一个对话框。看起来 API 级别 8 允许您使用 bundle 调用 showDialog,但我必须编写一个将在旧操作系统上运行的应用程序。
如何创建一个带有简单错误字符串之类的对话框,并确保它在我旋转屏幕时不会消失。
我意识到如果我覆盖 onCreateDialog,它会为我做。问题是,这只需要 int 常量。我需要向它传递一个字符串,以便它知道在对话框中放入什么。
如果我自己构建对话框,然后在其上调用 .show(),它将无法通过屏幕方向更改。
最佳答案
如果您的目标是 API 级别 <8,那就有点麻烦了。
- 将字符串消息设置为您 Activity 中的属性
- 使用 onSaveInstanceState(Bundle) 和 onRestoreInstanceState(Bundle) 通过配置更改(例如重新定位)来管理您的属性(property)
- 在onPrepareDialog(int, Dialog)中,将对话框的消息设置为此属性。如果您没有在 onPrepareDialog 中设置它,它将重新显示之前的对话框(以防您的消息需要在对话框之间更改。)
代码:
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// Save dialog message
if(dialogMessage != null) {
outState.putString(STATE_KEY_DIALOG_MESSAGE, dialogMessage);
}
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Load dialog message
if(savedInstanceState.containsKey(STATE_KEY_DIALOG_MESSAGE)) {
dialogMessage = savedInstanceState.getString(STATE_KEY_DIALOG_MESSAGE);
}
}
/** onCreateDialog as normal **/
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
super.onPrepareDialog(id, dialog);
switch(id) {
case DIALOG_MESSAGE:
// Decorate dialog appropriately
AlertDialog messageDialog = (AlertDialog) dialog;
messageDialog.setMessage(dialogMessage);
}
}
关于带有动态文本的 Android 对话框(API 级别 < 8)在旋转时被杀死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3888079/