4

I'm using an Intent Filter in my activity to retrive an url clicked on by the user.

In my activity onCreate method I have the following code

    Intent intent = getIntent();
    if (Intent.ACTION_VIEW.equals(intent.getAction())) {
        url = intent.getDataString();
        showDialog(DIALOG_ID);          
    }

It works great except when I rotate my phone. Even if tha dialog was closed prior to the rotation, it reopen every time I change the phone orientation. I can I avoir that.

For your information I don't want to lock the orientation

4

4 回答 4

5

另一个不需要自己处理配置更改的解决方案可能是在显示对话框之前简单地检查 onCreate 中的 savedInstanceState Bundle 参数是否为空。

如果您查看 onCreate 的文档,您会发现在重新创建活动时(例如由于配置更改),savedInstanceState 将为非空,因此当活动重新运行时将为空。

于 2012-08-23T00:54:19.577 回答
3

您通常会调用setIntent(null)以删除用于调用活动的意图。然而,在实践中,它并不总是有效。显然,一种常见的解决方法是将意图的操作或数据或两者都设置为 null,具体取决于您在代码中使用的内容。在您的情况下,显示对话框后,我可能会选择intent.setAction(null).

于 2014-03-07T13:25:54.460 回答
2

这是一个非常简单的修复。在清单文件中,找到活动并添加以下内容:

android:configChanges="keyboardHidden|orientation"

这将阻止您在 onCreate 中的逻辑再次触发(或者我相信)

从这里引用:

在某些特殊情况下,您可能希望根据一种或多种类型的配置更改绕过重新启动活动。这是通过清单中的 android:configChanges 属性完成的。对于您说您在那里处理的任何类型的配置更改,您将收到对当前活动的 onConfigurationChanged(Configuration) 方法的调用,而不是重新启动。但是,如果配置更改涉及您未处理的任何内容,则活动仍将重新启动,并且不会调用 onConfigurationChanged(Configuration)。

于 2012-06-08T22:00:34.420 回答
0

直到今天我才看到这个问题。我做到了getIntent().setAction("");,并解决了它。不再有脑损伤:)

于 2017-10-26T23:16:47.060 回答