具有动态文本(API级别< 8)的Android Dialog在轮换时被杀死

时间:2010-10-08 06:05:52

标签: android dialog orientation rotation

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

如何使用简单的错误字符串创建对话框,并确保在旋转屏幕时它不会死亡。

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

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

2 个答案:

答案 0 :(得分:2)

如果你的目标是API Level< 8,那就太痛苦了。

  1. 将字符串消息设置为“活动”
  2. 上的属性
  3. 使用 onSaveInstanceState(Bundle) onRestoreInstanceState(Bundle)通过配置更改(例如重新定位)管理您的媒体资源
  4. onPrepareDialog(int,Dialog)中,将对话框的消息设置为此属性。如果你没有在onPrepareDialog中设置它,它将重新显示上一个对话框(如果你的消息需要在对话框之间改变。)
  5. 代码:

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

答案 1 :(得分:-1)

你可以在构造函数中传递字符串。

public class MyDialog extends Dialog {

    public MyDialog(Context context, String msg) {
        super(context);
        TextView textView = new TextView(context);
        textView.setText(msg);
        setContentView(textView);
    }

}