我在AsyncTask对象的ProgressDialog
方法中显示onPreExecute
,并在onPostExecute
方法中取消ProgressDialog。在doInBackground
方法中,我正在为用户注册发出HTTP请求。我希望允许更改屏幕方向。当我在doInBackground
方法仍在运行时更改方向时,我会收到各种有趣的错误,例如'IllegalArgumentException:View未附加到窗口管理器'和'RegisterScreen已泄露窗口......'
如何在更改方向后正确继续显示ProgressDialog
?或者,如果用户请求提交注册后如何禁用方向更改?
答案 0 :(得分:15)
尝试将此属性android:configChanges="orientation"
添加到Activity
文件中的AndroidManifest.xml
元素。
答案 1 :(得分:6)
您可以尝试在显示ProgressDialog
期间禁用方向更改。
一开始就做:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
并在完成后启用:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
希望这有帮助。
(如果有人有正确的解决方案,我也会感兴趣: - )
答案 2 :(得分:4)
您希望正确处理活动生命周期,这意味着保存和恢复活动状态,而不是尝试阻止生命周期更改。对AsyncTask与活动生命周期进行一些阅读。
例如:pause-and-resume-asynctasks-android和what-to-do-with-asynctask-in-onpause。
答案 3 :(得分:2)
在应用程序manifest.xml中的activity标记中添加它
<activity android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"
android:name=".your.package"/>
答案 4 :(得分:1)
在我的情况下,我使用了
android:configChanges="orientation"
但它对我不起作用
以下工作正常
<activity android:name=".MyActivity"
android:configChanges="orientation|screenSize|screenLayout">
</activity>
答案 5 :(得分:-1)
您可以在“清单”中使用以下代码
<activity android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden"
android:name=".your.package">