gpt4 book ai didi

android - 屏幕方向更改后关闭对话框

转载 作者:可可西里 更新时间:2023-11-01 18:50:47 25 4
gpt4 key购买 nike

1) 我启动后台任务(通过 AsyncTask)

new FindJourneyTask().execute(); // FindJourneyTask extends AsyncTask

2) 仍然在主线程中(就在新线程启动之前)我用 showDialog(dialogId) 创建了一个对话框

// this method is in FindJourneyTask
protected void onPreExecute() {
showDialog(DIALOG_FINDING_JOURNEY);
}

3) 屏幕方向改变并重新创建 Activity

4) 现在如何关闭 FindJourneyTask 中的对话框?调用 dismissDialog(dialogId) 什么都不做。

// this method is in FindJourneyTask
protected void onPostExecute(FindJourneyResult result) {
dismissDialog(DIALOG_FINDING_JOURNEY); // does nothing
}

最佳答案

这是一个普遍的问题,并没有真正好的解决方案。问题是在屏幕方向改变时,整个 Activity 被销毁并重新创建。同时,你之前拥有的Dialog在新的Activity中重新创建,但是旧的后台任务在试图关闭对话框时仍然引用旧的Activity。结果是它关闭了很久以前被销毁的对话框,而不是关闭新方向创建的对话框。

基本的解决方案有以下三种:

  1. 覆盖默认的方向处理代码,这样您的 Activity 就不会在旋转时被销毁。这可能是最不令人满意的答案,因为它阻止了很多在方向更改时自动运行的代码。

  2. 为您的 Activity 创建一个引用 Activity 本身的静态成员变量,这样您就可以调用 STATIC_ACTIVITY_VARIABLE.dismissDialog()

  3. 编写一个解决方案,让后台任务跟踪当前 Activity 并根据需要更新自身。

这里详细讨论了这三种解决方案:http://groups.google.com/group/android-developers/browse_thread/thread/bf046b95cf38832d/

关于android - 屏幕方向更改后关闭对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2343884/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com