0

У моего приложения много диалогов. Когда я изменяю ориентацию устройства, диалог исчезает вместе с введенным содержимым, потому что перезапуск активности запускается при изменении ориентации. У меня есть два варианта: сохранить содержимое каждого диалогового окна в переменных, и когда активность перезапустится, я снова открою тот, который был открыт, и пополнит его. Это создает много кода шаблона, а также немного запутывает множество диалогов. Моим другим решением является использование android:configChanges="orientation" в файле манифеста, что предотвратит перезапуск активности. (Мой макет не меняется в разных направлениях, так что все в порядке). Но многие люди предположили, что это плохая практика, так как она предотвращает перезапуск активности при других изменениях конфигурации.Перезагрузка только при изменении ориентации

Есть ли способ предотвратить перезапуск активности только при изменении ориентации и сохранить его при других изменениях конфигурации?

+0

https://developer.android.com/guide/topics/manifest/activity-element.html#config это может помочь вам принять решение –

+0

Вы хотите, чтобы ваше приложение работало как в «пейзажном», так и «портретном» 'режим? Если нет, вы можете просто установить «android: screenOrientation =« landscape »на каждый ярлык активности в манифесте, и все готово. –

ответ

1

Из configChanges документации:
Укажите один или несколько изменений конфигурации, что активность будет обрабатывать себя. Если это не указано, действие будет перезапущено, если какое-либо из этих изменений конфигурации произойдет в системе.

Поэтому он не должен влиять на другие изменения конфигурации, кроме ориентации, если вы установили android:configChanges="orientation|screenSize".

+0

Документация говорит, что я должен установить 'android: configChanges =" orientation | screenSize ", что повлияет на что-либо другое, кроме ориентации? –

+0

Вы правы, также необходимо добавить параметр screenSize, поскольку он также изменяется, когда устройство переключается между портретной и альбомной ориентацией. (Обновлен мой ответ). Это не повлияет ни на что другое. – dzikovskyy

+0

Мои элементы панели инструментов, используемые для настройки на доступную комнату, но теперь они этого не делают. Как я могу воссоздать панель действий, чтобы она обновлялась? –

1

проверить это https://stackoverflow.com/a/15444485/1577428

Диалог исчезает, потому что при вращении он перезапускает деятельность таким образом, что диалог экземпляр должен быть сохранен и выкуплены после поворота это лучшая практика до сих пор

1

Вы можете использовать configChanges , это не плохая практика, но используйте ее в соответствии с требованиями. Проверьте this SO сообщение.

+0

Этот ответ предполагает, что это может помешать правильному перезапуску приложения. В этом случае с параметрами ориентации | screenSize? –

1

Если вы не являетесь окей с вышеуказанным ответом, который, похоже, не работает для вас. Вы можете создать один менеджер предположим DialogManager

общественного класса DialogManager {

private AlertDialog mAlertDialog; 

public void setAlertDialog(AlertDialog alertDialog) { 
    mAlertDialog = alertDialog; 
} 

public AlertDialog getAlertDialog() { 
    return mAlertDialog; 
} 

}

и экземпляр создается в классе приложения

общественного класса SampleApplication расширяет применение {

private DialogManager mDialogManager; 
private static SampleApplication mSampleApplication; 

public SampleApplication() { 
    super(); 
    mSampleApplication = this; 
} 
@Override 
public void onCreate() { 
    super.onCreate(); 
    mDialogManager = new DialogManager(); 
} 

public DialogManager getDialogManager() { 
    return mDialogManager; 
} 

public static SampleApplication getApplication() { 
    return mSampleApplication; 
} 

}

поэтому при изменении ориентации экрана вы можете установить диалоговое окно в DialogManager, поскольку приложение создает экземпляр только один раз.

, пожалуйста, дайте мне знать, если это решение не сработает для вас.

Смежные вопросы