17

我在AsyncTask 对象ProgressDialog的方法中显示一个并取消该方法中的 ProgressDialog。在该方法中,我正在为用户注册发出 HTTP 请求。我希望允许屏幕方向更改。当我在方法仍在运行时更改方向时,会出现各种有趣的错误,例如“IllegalArgumentException:视图未附加到窗口管理器”和“RegisterScreen 已泄漏窗口...”onPreExecuteonPostExecutedoInBackgrounddoInBackground

如何ProgressDialog在方向更改后正确地继续显示?或者,在用户请求提交注册后,如何禁用方向更改?

4

6 回答 6

15

尝试将此属性添加android:configChanges="orientation"到文件Activity中的元素AndroidManifest.xml

于 2010-09-13T14:31:18.690 回答
6

您可以尝试在显示ProgressDialog.

一开始做:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);

并在完成后重新启用:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);

希望这可以帮助。

(如果有人有适当的解决方案,我也会感兴趣:-)

于 2010-09-12T16:02:28.017 回答
4

您希望正确处理活动生命周期,这意味着保存和恢复活动状态,而不是试图阻止生命周期更改。阅读 AsyncTask 与活动生命周期。

例如:pause-and-resume-asynctasks-androidwhat-to-do-with-asynctask-in-onpause

于 2010-09-13T14:26:34.207 回答
2

将此添加到应用程序 manifest.xml 的活动标记中

<activity android:label="@string/app_name" android:configChanges="keyboardHidden|orientation|screenSize" android:name=".your.package"/>

于 2013-06-14T11:37:04.727 回答
1

就我而言,我使用过

android:configChanges="orientation" 

但这对我不起作用

以下工作正常

<activity android:name=".MyActivity" 
          android:configChanges="orientation|screenSize|screenLayout">
</activity>
于 2014-03-18T10:34:08.340 回答
-1

您可以在您的清单中使用以下代码

<activity android:label="@string/app_name" 
        android:configChanges="orientation|keyboardHidden" 
        android:name=".your.package">
于 2011-09-30T05:56:26.320 回答