gpt4 book ai didi

android - 获取对托管 ProgressDialog 的引用

转载 作者:搜寻专家 更新时间:2023-11-01 09:16:55 26 4
gpt4 key购买 nike

在我的 Activity 中,我需要一个带有水平进度条的 ProgressDialog 来可视化后台任务的进度。使 Activity 关注对话,例如在屏幕旋转的情况下,我想使用在 onCreateDialog 中创建的托管对话框。问题是我需要在创建对话框后更新它的进度条,因此我需要对托管进度对话框的引用:Does anyone know how to retrieve a reference to a dialog created by onCreateDialog?

目前我正在存储对在 onCreateDialog 中创建的对话框的引用,但是我在 onFinished() 中因 InvalidArgumentException 而失败> 屏幕旋转后的方法(并重新创建 Activity ):

public final class MyActivity extends Activity {
private static final int DIALOG_PROGRESS = 0;
private ProgressDialog progressDialog = null;

// [...]

@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_PROGRESS:
progressDialog = createProgressDialog();
return progressDialog;
default:
return super.onCreateDialog(id);
}
}

// [...]

public void updateProgress(int progress) {
progressDialog.setProgress(0);
}

public void onFinished() {
progressDialog.dismiss();
}

// [...]
}

我本来希望 Activity 类中有类似 getDialog(int) 的方法来获取对托管对话框的引用,但这似乎不存在.有什么想法吗?

最佳答案

我自己回答:

  1. Activity 类中确实没有可用的getDialog(int) 方法。
  2. 如上所示存储引用可以正常工作——错误是其他原因...

问题是,调用 onFinished() 方法的并行线程在已经销毁的 Activity 上调用了此方法,因此访问的 ProgressDialog 实例仍然存在但不再是一个有效的对话。相反,Android 已经创建了另一个带有另一个 ProgressDialog 的 Activity 。

所以我需要做的就是让后台线程调用新 Activity 的 onFinished() 方法,一切正常。为了切换引用,我覆盖了 Activity 类的 onRetainNonConfigurationInstance()getLastNonConfigurationInstance() 方法。

所示示例的好处:Android 真正关心在屏幕方向更改后重新创建新对话框。因此,以这种方式构建 ProgressDialog 绝对比使用 ProgressDialog.show() 更容易,后者需要我自己处理对话框重新创建(上述两种方法是做这件事的好地方。

关于android - 获取对托管 ProgressDialog 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4004294/

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