Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
url = intent.getDataString();
showDialog(DIALOG_ID);
}
除了当我旋转手机时,一切都很好。即使在旋转之前关闭了对话框,每次更改手机方向它都会重新打开。
我可以避免这种情况吗?
请注意,我不想锁定方向。
Intent intent = getIntent();
if (Intent.ACTION_VIEW.equals(intent.getAction())) {
url = intent.getDataString();
showDialog(DIALOG_ID);
}
除了当我旋转手机时,一切都很好。即使在旋转之前关闭了对话框,每次更改手机方向它都会重新打开。
我可以避免这种情况吗?
请注意,我不想锁定方向。
如果您不想自己处理配置更改,另一种解决方法可能是在显示对话框之前仅检查onCreate中的savedInstanceState Bundle参数是否为null。
如果您查看onCreate的文档,您会发现当活动被重新创建(例如由于配置更改)时,savedInstanceState将是非null的,因此当活动首次运行时,它将为null。
通常情况下,您会调用setIntent(null)
来删除用于召唤活动的意图。然而,在实践中,它并不总是有效。显然,一个常见的解决方法是将意图的操作或数据或两者都设置为null,具体取决于您在代码中使用的内容。在您的情况下,在显示对话框后,我可能会选择intent.setAction(null)
。
android:configChanges="keyboardHidden|orientation"
通过在清单文件中设置android:configChanges属性,可以防止onCreate方法再次触发(我是这么认为的)。
引用自这里:
在某些特殊情况下,您可能希望根据一种或多种类型的配置更改来绕过重新启动您的活动。这可以在其清单文件中使用android:configChanges属性来实现。对于您要处理的任何类型的配置更改,您都将收到当前活动的onConfigurationChanged(Configuration)方法的调用,而不是重新启动。但是,如果配置更改涉及到您不处理的任何配置更改,则仍然会重新启动该活动,并且不会调用onConfigurationChanged(Configuration)方法。
直到今天我才第一次遇到这个问题。我使用了 getIntent().setAction("");
并解决了它。不再有脑损伤啦 :)