Android диалог с динамическим текстом (уровень API <8) убит при ротации - PullRequest
1 голос
/ 08 октября 2010

Я хочу создать диалог со строкой, которую я строю во время выполнения. Похоже, уровень API 8 позволяет вам вызывать showDialog с пакетом, но мне нужно написать приложение, которое будет работать на старых ОС.

Как создать диалог с чем-то вроде простой строки ошибки и убедиться, что он не исчезнет, ​​когда я поверну экран.

Я понимаю, что если я переопределю onCreateDialog, он сделает это за меня. Проблема в том, что это просто принимает константу int. Мне нужно передать ей строку, чтобы она знала, что поместить в диалог.

Если я сам построю свой диалог, а затем вызову .show (), он не сможет изменить ориентацию экрана.

Ответы [ 2 ]

2 голосов
/ 02 февраля 2011

Если вы нацеливаетесь на уровень API <8, то это своего рода боль. </p>

  1. Установите строковое сообщение для свойства в вашей активности
  2. Используйте onSaveInstanceState (Bundle) и onRestoreInstanceState (Bundle) для управления своим свойством посредством изменений конфигурации (таких как переориентация)
  3. В onPrepareDialog (int, Диалог) , установите сообщение диалога в это свойство.Если вы не установите это в 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);
    }
}
0 голосов
/ 08 октября 2010

Вы можете просто передать строку в конструкторе.

public class MyDialog extends Dialog {

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

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...