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

您可以使用configChanges旋转后回,这不是一个坏习惯,而是按照要求使用它。检查this SO贴子。

+0

这个答案表明添加这可能会阻止应用程序正确重新启动。这是与方向| screenSize参数的情况? –

1

如果你不是okey与上面的答案似乎不适合你。您可以创建一个经理想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中设置对话框实例,因为应用程序仅创建实例一次。

请让我知道,如果这些解决方案不适合你。

相关问题