带有动态文本的 Android 对话框(API 级别 < 8)在旋转时被杀死

标签 android dialog orientation rotation

我想用我在运行时构建的字符串创建一个对话框。看起来 API 级别 8 允许您使用 bundle 调用 showDialog,但我必须编写一个将在旧操作系统上运行的应用程序。

如何创建一个带有简单错误字符串之类的对话框,并确保它在我旋转屏幕时不会消失。

我意识到如果我覆盖 onCreateDialog,它会为我做。问题是,这只需要 int 常量。我需要向它传递一个字符串,以便它知道在对话框中放入什么。

如果我自己构建对话框,然后在其上调用 .show(),它将无法通过屏幕方向更改。

最佳答案

如果您的目标是 API 级别 <8,那就有点麻烦了。

  1. 将字符串消息设置为您 Activity 中的属性
  2. 使用 onSaveInstanceState(Bundle)onRestoreInstanceState(Bundle) 通过配置更改(例如重新定位)来管理您的属性(property)
  3. 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/

相关文章:

Android源码从sdcard读取文件出错

android - 限制从 sqlite 返回的行数

android - 自定义 View : Canvas draw methods give API error

android - 适用于 Android 的自定义微调器对话框

iphone - window.orientation 在 UIWebView 中不起作用

ios - 如何在快速按下 Collection View 单元格时修复自定义 View 中的约束

java - ArrayList trimtosize 不工作 android

android - DatePicker 小部件(不是对话框)OnDateSet/OnClick 事件?

iphone - 在 iOS 上从横向 View 切换到纵向 View

android - 应用程序小部件中的是/否对话框