如何处理显示 ProgressDialog 的方向变化?
Posted
技术标签:
【中文标题】如何处理显示 ProgressDialog 的方向变化?【英文标题】:How to deal with orientation change with a ProgressDialog showing? 【发布时间】:2011-04-11 08:42:56 【问题描述】:我在 AsyncTask 对象的 onPreExecute
方法中显示 ProgressDialog
并在 onPostExecute
方法中取消 ProgressDialog。在doInBackground
方法中,我正在为用户注册发出HTTP 请求。我希望允许屏幕方向更改。当我在 doInBackground
方法仍在运行时更改方向时,我会收到各种有趣的错误,例如“IllegalArgumentException: View not attach to window manager”和“RegisterScreen has leaked window...”
如何在方向改变后正确地继续显示ProgressDialog
?或者,如何在用户请求提交注册后禁用方向更改?
【问题讨论】:
[这里是答案][1] 我认为这就是您正在寻找的解决方案。 [1]:***.com/a/3821998/1665247 【参考方案1】:尝试将此属性android:configChanges="orientation"
添加到AndroidManifest.xml
文件中的Activity
元素。
【讨论】:
这成功了!我真傻,我应该知道这是解决办法。 我必须在其中添加“screenSize”以针对 API 级别 13 及更高级别。否则它不适用于这些环境。 android:configChanges="orientation|screenSize" 感谢 screenSize 提示!我有“方向|键盘”,突然它不再工作了。这很好用,谢谢!【参考方案2】:您可以尝试在显示 ProgressDialog
期间禁用方向更改。
在开头做:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);
并在完成后重新启用:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR);
希望这会有所帮助。
(如果有人有合适的解决方案,我也会感兴趣:-)
【讨论】:
问题不在于方向改变。由于活动生命周期会破坏并重新创建您的活动,因此您会看到这些问题。阻止方向更改将阻止此特定生命周期实例,但是当用户在 ProgressDialog 期间按“Home”并返回时,会出现相同的问题。您的活动应设计为随时关闭和重新启动。 如果我的 AsyncTask 不在我的活动中怎么办......它在许多活动类共有的另一个类文件中。那我怎样才能得到 setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR); 很好,但要锁定方向 ActivityInfo.SCREEN_ORIENTATION_LOCKED 对我来说效果更好,尤其是在横向中。【参考方案3】:您希望正确处理活动生命周期,这意味着保存和恢复活动状态,而不是试图阻止生命周期更改。阅读 AsyncTask 与 Activity 生命周期。
例如:pause-and-resume-asynctasks-android 和 what-to-do-with-asynctask-in-onpause。
【讨论】:
【参考方案4】:将此添加到应用程序 manifest.xml 的活动标记中
<activity android:label="@string/app_name"
android:configChanges="keyboardHidden|orientation|screenSize"
android:name=".your.package"/>
【讨论】:
【参考方案5】:就我而言,我使用过
android:configChanges="orientation"
但它对我不起作用
以下工作正常
<activity android:name=".MyActivity"
android:configChanges="orientation|screenSize|screenLayout">
</activity>
【讨论】:
【参考方案6】:您可以在您的清单中使用以下代码
<activity android:label="@string/app_name"
android:configChanges="orientation|keyboardHidden"
android:name=".your.package">
【讨论】:
以上是关于如何处理显示 ProgressDialog 的方向变化?的主要内容,如果未能解决你的问题,请参考以下文章