仅在方向更改时重新启动活动

时间:2016-10-25 12:02:35

标签: android android-activity screen-orientation android-configchanges

我的应用有很多对话框。当我更改设备的方向时,对话框会随输入的内容一起消失,因为在方向更改时会触发活动重启。我有两个选择:保存变量中每个对话框的内容,当活动重新启动时,我重新打开已打开的对话框并重新填充它。这会产生很多样板代码,并且它会让许多对话框变得混乱。我的另一个解决方案是在清单文件中使用android:configChanges="orientation",这将阻止活动重启。 (我的布局在不同方向上没有变化,所以没关系)但是很多人认为这是一种不好的做法,因为它会阻止活动重新启动其他配置更改。

是否有办法阻止仅在方向更改时重新启动活动并将其保留在其他配置更改上?

4 个答案:

答案 0 :(得分:1)

来自configChanges文件:
指定活动将自行处理的一个或多个配置更改。如果未指定,则在系统中发生任何这些配置更改时,将重新启动活动。

因此,如果设置android:configChanges="orientation|screenSize",则不应影响除定向之外的其他配置更改。

答案 1 :(得分:1)

检查此https://stackoverflow.com/a/15444485/1577428

对话框消失,因为在旋转中它重新启动活动,因此必须保存对话框实例并在轮换后回购这是迄今为止的最佳做法

答案 2 :(得分:1)

您可以使用configChanges,这不是一个不好的做法,但可以根据要求使用它。检查this SO post。

答案 3 :(得分:1)

如果你不满意以上答案似乎不适合你。您可以创建一个管理器,假设 DialogManager

public class DialogManager {

private AlertDialog  mAlertDialog;

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

public AlertDialog getAlertDialog() {
    return mAlertDialog;
}

}

并在应用程序类

中创建实例

公共类SampleApplication扩展了Application {

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中设置对话框实例,因为应用程序仅创建一次实例。

如果这些解决方案不适合您,请告诉我。