Android:AsyncTask ProgressDialog 不会在 ActivityGroup 中打开
Posted
技术标签:
【中文标题】Android:AsyncTask ProgressDialog 不会在 ActivityGroup 中打开【英文标题】:Android: AsyncTask ProgressDialog will not open in ActivityGroup 【发布时间】:2011-05-18 19:12:09 【问题描述】:我试图在轮询我的服务器时打开一个进度对话框。该类是一个 ActivityGroup,因为它嵌套在选项卡栏中。要将视图保持在框架内,需要 ActivityGroup。这是我的 ActivityGroup 类的声明:
public class CheckInActivity extends ActivityGroup
...
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.checkin);
new LocationControl().execute(this);
现在我的 AsyncTask 类在同一个 CheckInActivityClass 中:
private class LocationControl extends AsyncTask<Context, Void, Void>
private final ProgressDialog dialog = new ProgressDialog(CheckInActivity.this);
protected void onPreExecute()
this.dialog.setMessage("Determining your location...");
this.dialog.show();
当我运行给定的应用程序时,它会遇到与 WindowManager$BadTokenException 相关的错误。说明它无法使用未知令牌启动窗口。我尝试制作一个只是常规 Activity(不是 ActivityGroup)的示例应用程序,它工作得很好。
有谁知道如何修改它以使其工作,或者解决方法可以让进度条嵌套在标签栏中?非常感谢任何帮助。
【问题讨论】:
【参考方案1】:如果 ActivityGroup 位于 TabActivity 中,则您有超过两个级别的嵌套活动。 android 目前不支持此功能,但有一种解决方法。您必须将父活动传递给对话框。
为此在活动类中创建一个辅助方法:
private Context getDialogContext()
Context context;
if (getParent() != null) context = getParent();
else context = this;
return context;
那就换行
private final ProgressDialog dialog = new ProgressDialog(CheckInActivity.this);
到
private final ProgressDialog dialog = new ProgressDialog(getDialogContext());
【讨论】:
【参考方案2】:这里简单你也可以使用下面的
private final ProgressDialog dialog = new ProgressDialog(getParent());
它非常适合我。
【讨论】:
【参考方案3】:如果 getParent() 对您不起作用,请尝试仅使用 TabsActivity.context
(或替换您的父选项卡活动类的名称)。我正在使用嵌套活动,因此使用 getParent() 仍然没有为对话框返回正确的上下文,因为它需要扩展 TabsActivity 的活动上下文,而不是直接父级。
简单修复:
您需要在 TabsActivity 类中创建一个上下文变量。 onCreate 方法中的 public static TabsActivity context;
和 context=this
之类的东西。
替换您创建对话框的这一行:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
与:
AlertDialog.Builder builder = new AlertDialog.Builder(TabsActivity.context);
它就像一个魅力。
【讨论】:
以上是关于Android:AsyncTask ProgressDialog 不会在 ActivityGroup 中打开的主要内容,如果未能解决你的问题,请参考以下文章
android:如果一个 AsyncTask 已经在运行,则阻止另一个 AsyncTask 执行